Dockerfile常用命令整理

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 镜像。

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Docker

Containerd 客户端命令行工具入门教程

2024-12-6 8:58:08

Docker

docker-mirror:神奇指令,一键把镜像拉回“家”

2024-12-9 11:03:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索