Dockerfile 中最常见的指令及其作用如下(按使用频率和重要性排序):
FROM
作用:指定基础镜像(必须作为第一条指令)。
示例:
FROM ubuntu:20.04
FROM python:3.9-slim
RUN
作用:执行命令并创建新的镜像层(常用于安装软件、配置环境)。
示例:
RUN apt-get update && apt-get install -y curl
RUN pip install flask
COPY
/ ADD
作用:将文件/目录从主机复制到镜像中。
- COPY
:仅复制本地文件。
- ADD
:支持自动解压压缩包或从URL下载(推荐优先用 COPY
)。
示例:
COPY ./app /app
ADD https://example.com/file.tar.gz /tmp/
WORKDIR
作用:设置工作目录(后续指令的相对路径基于此目录)。
示例:
WORKDIR /app
EXPOSE
作用:声明容器运行时监听的端口(需配合 docker run -p
映射)。
示例:
EXPOSE 80
EXPOSE 443
CMD
/ ENTRYPOINT
作用:定义容器启动时的默认命令。
- CMD
:可被 docker run
覆盖。
- ENTRYPOINT
:通常用于固定入口命令。
示例:
CMD ["python", "app.py"]
ENTRYPOINT ["nginx", "-g", "daemon off;"]
ENV
作用:设置环境变量(可被后续指令或容器运行时使用)。
示例:
ENV NODE_ENV=production
ENV APP_PORT=8080
ARG
作用:定义构建时的变量(仅在构建阶段有效)。
示例:
ARG VERSION=latest
FROM alpine:$VERSION
VOLUME
作用:声明匿名数据卷(持久化数据)。
示例:
VOLUME ["/data"]
USER
作用:指定运行后续指令的用户(提升安全性)。
示例:
USER nobody
LABEL
:添加元数据(如维护者信息)。HEALTHCHECK
:定义容器健康检查。ONBUILD
:延迟执行指令(用于基础镜像定制)。FROM
指令)。RUN
命令:减少镜像层数(用 &&
连接命令)。.dockerignore
:忽略不需要的文件(类似 .gitignore
)。示例完整 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
掌握这些指令即可覆盖 90% 的日常场景!