以下是常用的 Dockerfile 指令和它们的功能:
1. FROM
定义镜像的基础镜像。每个 Dockerfile 都应该以 FROM 开头,指定使用哪个基础镜像构建当前镜像。
FROM ubuntu:20.04
2. RUN
在镜像构建过程中执行命令,如安装软件包、更新系统等。每个 RUN 指令都会创建一个新的镜像层。
RUN apt-get update && apt-get install -y python3
3. CMD
指定容器启动时默认执行的命令。通常,CMD 用于启动应用程序。一个 Dockerfile 只能有一个 CMD,如果有多个 CMD,最后一个 CMD 会生效。
CMD ["python3", "app.py"]
4. ENTRYPOINT
定义容器启动时始终执行的命令,通常与 CMD 结合使用。ENTRYPOINT 会始终执行,但 CMD 中的内容会作为默认参数传递给 ENTRYPOINT。
ENTRYPOINT ["python3"]
CMD ["app.py"]
5. ENV
设置环境变量,容器在运行时可以访问这些变量。你可以通过 ENV 来定义多个环境变量。
ENV APP_ENV=production
ENV DB_HOST=db.local
6. COPY
将文件从主机复制到容器内指定的路径。与 ADD 相比,COPY 更为简单和明确,通常用于复制本地文件到镜像中。
COPY ./myapp /app
7. ADD
除了复制文件外,ADD 还可以解压 .tar 文件和从 URL 下载文件。虽然 COPY 更推荐用于复制本地文件,但 ADD 对某些情况(如从 URL 下载文件)更为方便。
ADD ./source.tar.gz /app
8. EXPOSE
声明容器需要监听的端口。EXPOSE 本身不会发布端口,但它告诉 Docker 用户和其他开发者容器将使用哪些端口。
EXPOSE 8080
9. VOLUME
创建一个挂载点,允许数据从宿主机或其他容器挂载到容器内的指定路径。常用于持久化数据。
VOLUME ["/data"]
10. WORKDIR
设置工作目录,所有后续的命令(如 RUN、CMD 等)都会在该目录中执行。如果目录不存在,WORKDIR 会创建它。
WORKDIR /app
11. USER
指定容器内运行命令的用户。默认情况下,容器以 root 用户运行,可以通过 USER 指定其他用户。
USER appuser
12. ARG
定义构建时的变量,ARG 的值在构建时提供,可以用作参数传递给 RUN 命令等。
ARG APP_VERSION=1.0
RUN echo "App version: $APP_VERSION"
13. LABEL
给镜像添加元数据,例如版本、作者、描述等。LABEL 可以使用键值对来存储信息。
LABEL version="1.0" author="developer"
14. SHELL
更改容器中默认的 shell,默认情况下是 /bin/sh -c,可以将其更改为其他 shell,如 bash。
SHELL ["/bin/bash", "-c"]
15. STOPSIGNAL
设置容器停止时发送的信号。默认情况下,Docker 会发送 SIGTERM 信号来停止容器,但你可以通过 STOPSIGNAL 指定其他信号(例如 SIGINT)。
STOPSIGNAL SIGTERM
16. HEALTHCHECK
定义容器的健康检查命令,Docker 会定期执行该命令来检查容器是否健康。你可以定义检查的时间间隔、重试次数等。
HEALTHCHECK --interval=30s --retries=3 CMD curl --fail http://localhost/health || exit 1
17. ONBUILD
指定当作为基础镜像时,执行的指令。它常用于定义父镜像中的某些构建步骤,在子镜像中自动执行。ONBUILD 指令通常用于构建可复用的基础镜像。
ONBUILD RUN echo "This will run when this image is used as a base."
18. COPY --from (多阶段构建)
用于多阶段构建中,从另一个构建阶段复制文件。多阶段构建可以帮助减少最终镜像的大小。
FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o myapp .
FROM alpine:3.12
COPY --from=builder /src/myapp /usr/local/bin/
总结
除了 FROM、RUN、CMD、ENV 之外,Dockerfile 还有很多其他有用的指令,帮助你在构建镜像时更好地配置环境、管理文件和优化性能。以下是这些指令的总结:
- 定义镜像环境:
FROM、ENV、LABEL、WORKDIR - 运行命令:
RUN、CMD、ENTRYPOINT - 文件操作:
COPY、ADD、VOLUME - 容器管理:
EXPOSE、USER、STOPSIGNAL - 构建优化:
ARG、HEALTHCHECK、ONBUILD - 多阶段构建:
COPY --from
这些指令可以帮助你创建更灵活、可维护且高效的 Docker 镜像。






暂无评论内容