mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +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。
第六章 访问仓库
仓库 (Repository) 是集中存放镜像的地方。
一个容易混淆的概念是注册服务器 (Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 docker.io/ubuntu 来说,docker.io 是注册服务器地址,ubuntu 是仓库名。
大部分时候,并不需要严格区分这两者的概念。
版本号说明
本章涉及的 Registry 和相关工具版本说明:
- Docker Registry / CNCF Distribution:本章示例使用
registry:2兼容路径;新生产部署应评估 Distribution 3.x,并核对配置路径、迁移说明和生态兼容性。已停止维护的registry:1不建议使用 - Nexus 3:建议指定具体版本(如
sonatype/nexus3:3.69)而非latest,避免自动升级带来的兼容性问题 - 镜像标签规范:
- 生产环境推送至仓库时应明确指定版本号(如
myapp:v1.0.0) - 避免依赖
latest标签,因为其含义存在歧义且易导致版本混淆
- 生产环境推送至仓库时应明确指定版本号(如
为什么需要私有仓库?
在讨论具体的安装和配置前,让我们先理解:什么时候你应该建设私有仓库?
开发团队(有专利代码、不能公开):
- 需要私有仓库存储内部镜像
- 涉及访问控制和审计
- 强烈推荐使用托管方案(如 Harbor 或云厂商提供的镜像仓库)
开源项目或个人学习:
- Docker Hub 公开仓库足够
- 无需自建私有仓库的成本
企业级部署:
- 需要高可用、备份、灾难恢复
- 推荐使用专业级方案(Nexus 3、Harbor)而非简单的 Registry
本章涵盖的方案从简到复杂:
- Docker Registry:最小化部署(适合简单场景)
- 私有仓库高级配置:添加认证、HTTPS 等生产必需项
- Nexus 3:企业级完整解决方案,支持权限管理、备份等