Dockerfile 指令参考
完整的 Dockerfile 指令参考手册。
基础指令
FROM
指定基础镜像,必须是 Dockerfile 的第一条指令。
FROM ubuntu:22.04FROM node:18-alpineFROM scratch # 从空白镜像开始WORKDIR
设置工作目录。
WORKDIR /appWORKDIR /app/src # 相对于上一个 WORKDIRCOPY
复制文件到镜像。
COPY app.js /app/COPY --chown=user:group app.js /app/COPY --from=builder /app/dist /app/ADD
高级复制,支持 URL 和自动解压。
ADD app.tar.gz /app/ # 自动解压ADD https://example.com/file.txt /app/RUN
执行命令。
RUN apt-get update && apt-get install -y curlRUN npm installRUN ["npm", "install"] # exec 形式运行时指令
CMD
容器启动时的默认命令。
CMD ["node", "server.js"]CMD node server.jsENTRYPOINT
容器入口点。
ENTRYPOINT ["python", "app.py"]ENTRYPOINT python app.pyEXPOSE
声明端口。
EXPOSE 80EXPOSE 8080/tcpEXPOSE 8080/udp环境指令
ENV
设置环境变量。
ENV NODE_ENV productionENV PORT=3000 LOG_LEVEL=infoARG
构建参数。
ARG VERSION=1.0ARG NODE_VERSIONRUN echo $VERSION元数据指令
LABEL
添加元数据标签。
LABEL maintainer="dev@example.com"LABEL version="1.0"USER
指定运行用户。
USER nodejsUSER 1001:1001高级指令
VOLUME
定义卷挂载点。
VOLUME /dataVOLUME ["/var/log", "/var/db"]HEALTHCHECK
健康检查。
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1ONBUILD
为子镜像添加触发器。
ONBUILD COPY . /appONBUILD RUN npm installSTOPSIGNAL
指定停止信号。
STOPSIGNAL SIGTERMSHELL
更改默认 shell。
SHELL ["/bin/bash", "-c"]多阶段构建
FROM golang:1.21 AS builderWORKDIR /buildCOPY . .RUN go build -o app
FROM alpine:latestCOPY --from=builder /build/app .CMD ["./app"]最佳实践
- ✅ 合并 RUN 指令减少层数
- ✅ 使用 COPY 而不是 ADD
- ✅ 使用 exec 形式的 CMD
- ✅ 清理缓存和临时文件
- ✅ 利用构建缓存排序指令