1. 基础镜像与环境配置
FROM
- 指定镜像的基础镜像,是每个
Dockerfile
必须的第一条指令。 - 支持从本地镜像库或 Docker Hub 拉取镜像。
- 允许多阶段构建(
multi-stage builds
),通过多次使用FROM
,逐步构建出优化的镜像。
MAINTAINER
(已废弃,推荐使用 LABEL
)
- 用于指定镜像的维护者信息,已被
LABEL
替代。
2. 文件复制与操作
COPY
- 将本地文件/目录复制到镜像的指定路径中。
- 只能处理本地路径,无法解压或从远程 URL 下载。
ADD
- 与
COPY
类似,但功能更强大,支持解压.tar
文件以及从 URL 下载资源。 - 注意:如果不需要额外功能,优先使用
COPY
。
3. 安装依赖与执行命令
RUN
- 在构建镜像时执行的命令,通常用于安装软件或执行脚本。
- 每条
RUN
指令会生成一个新的镜像层,因此建议将多条命令合并以减少镜像层的数量。
CMD
- 容器启动时默认执行的命令。
- 它与
RUN
的区别在于,CMD
是为容器设置的默认命令,而非构建时执行。 - 每个
Dockerfile
只能有一个CMD
,如果定义多个,只有最后一个生效。
ENTRYPOINT
- 类似于
CMD
,但优先级更高。 - 通常与
CMD
配合使用,为镜像设置默认的可执行程序。
4. 环境变量与工作目录
ENV
- 设置镜像或容器运行时的环境变量。
- 适合传递动态配置参数,提高镜像的灵活性。
WORKDIR
- 设置镜像中工作的默认目录。
- 之后的所有指令都会基于该目录执行。
5. 暴露端口与数据持久化
EXPOSE
- 声明镜像需要开放的端口,仅作为文档用途,实际需要使用
docker run
或docker-compose
明确映射端口。
VOLUME
- 声明数据卷,用于容器与主机之间共享和持久化数据。
- 数据卷不会随容器删除而被清理。
6. 元数据与参数
LABEL
- 为镜像添加元数据,如描述信息、版本号、维护者等。
- 推荐用于替代已废弃的
MAINTAINER
。
ARG
- 定义构建时的参数,适合动态设置构建变量,如版本号。
ARG
参数的作用范围仅限于构建阶段,容器运行时不可用。
7. 容器优化
USER
- 指定容器中运行的用户,提升安全性,避免以
root
用户运行。
HEALTHCHECK
- 为容器添加健康检查。
- 当容器运行时,Docker 会定期执行指定命令,检查容器是否处于健康状态。
ONBUILD
- 定义触发器,供继承当前镜像的其他
Dockerfile
执行特定指令。 - 多用于基础镜像的扩展。
SHELL
- 指定默认的 Shell 类型(如
bash
或sh
),适合在非 Linux 环境中使用。
8. 其他注意事项
构建镜像时的优化建议:
- 减少镜像层数:将多条
RUN
指令合并到一行。 - 清理缓存和临时文件:构建完成后使用命令清理安装过程中的多余数据。
- 多阶段构建:通过分离构建与运行阶段,构建出更小、更高效的镜像。
最佳实践:
- 使用官方基础镜像,确保安全和兼容性。
- 尽量使用
COPY
替代ADD
,以避免不必要的复杂性。 - 使用
ENV
和ARG
提高镜像的可移植性。 - 对于敏感数据(如 API 密钥),避免直接写入
Dockerfile
,使用构建参数或运行时环境变量。
通过上述命令和优化建议,可以灵活地构建功能强大且高效的 Docker 镜像。
声明:
本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。