全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

Dockerfile 语法结构

Dockerfile 是构建镜像的脚本文件,下面介绍基础指令的用法。

基本结构

dockerfile
# 基础镜像
FROM ubuntu:22.04

# 维护者信息(已废弃,使用 LABEL)
LABEL maintainer="user@example.com"

# 执行命令
RUN apt-get update && apt-get install -y nginx

# 拷贝文件
COPY nginx.conf /etc/nginx/nginx.conf

# 工作目录
WORKDIR /app

# 暴露端口
EXPOSE 80

# 启动命令
CMD ["nginx", "-g", "daemon off;"]

核心指令

FROM - 基础镜像

dockerfile
# 指定基础镜像
FROM ubuntu:22.04

# 使用精简基础镜像
FROM alpine:3.18
FROM node:18-alpine

每条 Dockerfile 必须以 FROM 开始,可有多条(多阶段构建)。

RUN - 构建时执行

dockerfile
# Shell 格式
RUN apt-get update && apt-get install -y nginx

# Exec 格式(推荐)
RUN ["apt-get", "update"]

# 多条 RUN 合并(减少层数)
RUN apt-get update && \
    apt-get install -y nginx && \
    rm -rf /var/lib/apt/lists/*

每条 RUN 指令创建新层,合并指令减少镜像层数。

COPY vs ADD

dockerfile
# COPY - 仅拷贝文件(推荐)
COPY app.jar /app/app.jar
COPY requirements.txt .

# ADD - 额外功能(自动解压 tar 包)
ADD app.tar.gz /app/

优先使用 COPY,ADD 仅在需要自动解压或远程 URL 时使用。

CMD - 容器启动命令

dockerfile
# Exec 格式(推荐)
CMD ["nginx", "-g", "daemon off;"]

# Shell 格式
CMD nginx -g 'daemon off;'

# 可被 docker run 覆盖
# docker run my-image custom-command

CMD 定义容器默认启动命令,docker run 可覆盖。Exec 格式不会启动 shell 进程。

ENTRYPOINT - 入口点

dockerfile
# 设置固定入口程序
ENTRYPOINT ["nginx"]

# 配合 CMD 提供默认参数
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]

# 运行时可追加参数
# docker run my-image -t 1

ENV - 环境变量

dockerfile
# 设置环境变量
ENV NODE_ENV=production
ENV APP_HOME=/app
ENV PORT=3000

# 使用变量
WORKDIR $APP_HOME

完整示例

dockerfile
# 基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 拷贝依赖文件
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 拷贝应用代码
COPY . .

# 设置环境变量
ENV NODE_ENV=production
ENV PORT=3000

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["node", "server.js"]

要点总结

  • FROM 指定基础镜像,必须是第一条指令
  • RUN 在构建时执行命令,合并多条指令减少层数
  • COPY 仅拷贝文件,ADD 支持自动解压和远程 URL
  • CMD 定义默认启动命令,可被 docker run 覆盖
  • ENTRYPOINT 设置固定入口程序,配合 CMD 提供默认参数
  • ENV 设置环境变量,在后续指令中可引用

📝 发现内容有误?点击此处直接编辑

← 上一篇 绑定挂载数据卷
下一篇 → EXPOSE 端口声明
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库