mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
1. FROM「必须是第一条指令」(4.5、7.16、summary 三处)与本书 7.7.4「FROM 之前的 ARG」整节直接冲突。官方 Dockerfile 参考写的是 "A Dockerfile must begin with a FROM instruction. This may be after parser directives, comments, and globally scoped ARGs",且 "ARG is the only instruction that may precede FROM"。三处 一并改成「第一条构建指令」并点明例外。 2. 12 章小结把 USER Namespace 列进「默认启用」的一档,并写「容器 root ≠ 宿主机 root」;而同章 12.2.2 明写 USER Namespace 默认**不**启用、需 userns-remap 显式 开启,18.1 更直说「在默认情况下,容器内的 root 用户(UID=0)就是宿主机上的 root 用户」。小结按正文口径改回——这条读反了会直接误判容器逃逸的风险面。 3. 11.5「目前支持三种日志驱动类型」是 Compose 早期文本的残留。官方支持 json-file、 local、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs、 none 共十余种,本书 19 章小结自己就列了六种。改为给出常见取值并链到官方清单。 4. 7.8 与 7.5 的示例注释建议 postgres:latest / redis:latest,而 4.1、7.10、 7.16、7 章小结、4.5 全都要求避免 latest(7.8 同一文件第 177 行也写「避免 latest」)。按全书口径改掉这两处。 另:ENV 的空格分隔旧写法(7.6 的「格式一」、附录四的 PG_MAJOR/PATH 示例)改为等号 形式并加注。BuildKit 的 LegacyKeyValueFormat 检查会报 "ENV key=value" should be used instead of legacy "ENV key value" format, 而本书 10.2 与 07 章 README 正是在推荐 docker buildx build --check。
45 lines
1.6 KiB
Go
45 lines
1.6 KiB
Go
## 7.16 参考文档
|
||
|
||
### 官方文档
|
||
|
||
* `Dockerfile` 官方参考手册:https://docs.docker.com/reference/dockerfile/
|
||
|
||
* `Dockerfile` 最佳实践指南:https://docs.docker.com/build/building/best-practices/
|
||
|
||
* `Docker` 官方镜像 `Dockerfile` 库:https://github.com/docker-library/docs
|
||
|
||
### 常用指令总结
|
||
|
||
Dockerfile 中的常用指令包括:
|
||
|
||
- **FROM**: 指定基础镜像,必须是第一条构建指令(只有全局 `ARG`、注释和 parser 指令可以在它之前)
|
||
- **RUN**: 在镜像中执行命令,用于安装软件包等
|
||
- **COPY**: 复制文件到镜像中
|
||
- **ADD**: 更高级的复制文件(支持 URL 和自动解压)
|
||
- **CMD**: 容器默认执行的命令
|
||
- **ENTRYPOINT**: 容器启动时的入口点
|
||
- **ENV**: 设置环境变量
|
||
- **ARG**: 构建时的参数变量
|
||
- **VOLUME**: 定义匿名卷挂载点
|
||
- **EXPOSE**: 声明容器监听的端口
|
||
- **WORKDIR**: 设置工作目录
|
||
- **USER**: 指定运行容器时的用户
|
||
- **HEALTHCHECK**: 配置容器健康检查
|
||
- **ONBUILD**: 设置触发器指令,在子镜像构建时执行
|
||
- **LABEL**: 为镜像添加元数据标签
|
||
- **SHELL**: 指定 RUN 等指令使用的 shell
|
||
|
||
### 最佳实践建议
|
||
|
||
1. 使用具体的基础镜像版本标签而非 latest
|
||
2. 最小化镜像层数,合并 RUN 指令
|
||
3. 使用 .dockerignore 文件排除不必要的文件
|
||
4. 安装必要的软件包后清理缓存
|
||
5. 使用多阶段构建减小最终镜像体积
|
||
6. 避免以 root 身份运行容器应用
|
||
|
||
### 相关资源
|
||
|
||
- Docker 官方镜像库:https://hub.docker.com/
|
||
- Docker 镜像构建最佳实践:https://docs.docker.com/build/building/best-practices/
|