mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
* appendix/repo/nodejs.md:`docker build -t my-nodejs-app` 缺上下文参数,实际会
报 "docker buildx build" requires exactly 1 argument;补 `.`。同文件 docker run
示例里 `# -v "$ ":/usr/src/myapp \` 这一行的注释把自己的续行反斜杠也注掉了,加上
紧跟的空行,命令在 `--name my-running-script` 处就结束、没有镜像名,后面几行变成
独立的无效命令。该行内容与下一行的 --mount 重复,且 `"$ "` 已是残缺文本,删去。
* 06_repository/6.4:`openssl s_client -connect YourDomainName OR HostIP:443` 里的
占位符带空格,shell 会切成三个参数,-connect 只收到 YourDomainName,openssl 直接
报错;`docker login YourDomainName OR HostIP` 同理。改为一个变量。
* 08_data/8.2:`docker run -v $(pwd):/app -p 3000:3000 node npm run dev` 跑不起来
——官方 node 镜像没有设置 WORKDIR(docker-node 的 Dockerfile 里只有 ENTRYPOINT
与 CMD),工作目录是 /,npm 找不到 /package.json。补 -w /app,顺手引号包住 $(pwd)
并给出确定的标签(本书 4.1、7.10 都要求避免 latest)。
* 12_implementation/12.6:整段用的是 iproute2(ip link add / ip netns exec),中间
却夹了一句 `brctl addif`。bridge-utils 在当前 Debian/Ubuntu/RHEL 默认不再安装,
照抄会在这一行断掉;改成等价的 `ip link set A master docker0`。
* 14.1/14.2 的 `sysctl --system`、14.1 join 节点的 `systemctl enable/start
containerd`、6.4 的 `systemctl restart docker` 都缺 sudo,而紧邻的行(sudo tee、
14.1 第 47 行的 sudo systemctl restart containerd)都带。补齐。
* 15_etcd/demo/cluster/docker-compose.yml 仍留着顶层 `version: "3.6"`,Compose 会
警告 obsolete;11.1 明写「新文件建议直接省略该字段」,15.3 正文内联的同一份文件
也早已省略,只有磁盘上的 demo 落下了。删除后 YAML 仍可正常解析。
* 11.4:「对于 web 项目中的一个 db 容器,可能是 web_db」是 Compose V1 的下划线拼接,
V2 起统一改用连字符,只有 --compatibility 才回到下划线。
* 附录四 CMD 一节四处写成 `CMD ['executable', 'param1']` 单引号,还说「我们建议任何
服务镜像都使用这种形式」。exec 形式是 JSON,单引号解析不出来会退回 shell 形式,本书
7.4 就把 `CMD ['node', 'server.js']` 明确标为「❌ 错误:单引号(JSON 不支持)」。
一并把 `CMD ['PHP', '-a']` 的二进制名改回小写 php。
第十一章 Docker Compose
Docker Compose 是 Docker 官方编排 (Orchestration) 项目之一,负责快速定义和启动本地或单机多容器应用。跨主机集群编排应交给 Swarm、Kubernetes 或云厂商托管服务。
⚠️ 重要提示:Compose V1 已停止支持
早期基于 Python 编写的 Compose V1(命令为
docker-compose)已于 2023 年中正式停止支持。现已全面升级为基于 Go 编写的 Compose V2,作为 Docker CLI 的官方插件提供(命令为docker compose,中间为空格)。本书强烈推荐且后续章节均以 V2 为核心标准进行讲解。
Docker Compose 解决什么问题?
在学习 Compose 之前,笔者想强调它的真正价值。假设你正在开发一个微服务应用——前端、后端、数据库三个服务。如果你用 Docker 容器分别运行它们,你会遇到这些问题:
- 启动顺序:需要先启数据库,再启后端,最后启前端
- 网络连接:三个容器需要能彼此通信
- 卷挂载:本地代码需要映射到容器内
- 环境变量:每个服务的配置需要逐个设置
使用 docker run 逐个启动的话,需要记住 3 条复杂的命令。而 Docker Compose 的核心价值就是用一个 YAML 文件来定义整个应用,然后一条命令 docker compose up 启动所有服务。这是 Compose 被广泛采用的原因——它极大地简化了本地开发和测试的复杂性。
谁应该学 Compose? 任何使用 Docker 进行本地开发的人,以及需要快速部署多容器应用的团队。
本章将介绍 Compose 项目情况以及安装和使用。