RUN 与 CMD
RUN vs CMD
RUN = 构建时执行(生成镜像层)
CMD = 运行时执行(容器启动时)
RUN 指令
# Shell 形式
RUN apt-get update && apt-get install -y curl
# Exec 形式
RUN ["apt-get", "install", "-y", "curl"]
# 多条 RUN 合并(减少层数)
RUN apt-get update && \
apt-get install -y \
curl \
wget \
vim && \
rm -rf /var/lib/apt/lists/*
CMD 指令
# Exec 形式(推荐)
CMD ["nginx", "-g", "daemon off;"]
# Shell 形式
CMD nginx -g "daemon off;"
# 作为 ENTRYPOINT 的默认参数
CMD ["--help"]
RUN vs CMD 对比
| 方面 | RUN | CMD |
|---|
| 执行时机 | 构建时 | 运行时 |
| 数量 | 可多个 | 只有最后一个生效 |
| 缓存 | 会被缓存 | 不影响构建 |
| 覆盖 | - | docker run 参数覆盖 |
小结
| 指令 | 时机 | 用途 |
|---|
RUN | 构建 | 安装软件、编译代码 |
CMD | 运行 | 设置默认启动命令 |