Skip to content

Dockerfile

Dockerfile 是一个文本文件,包含了一系列指令,用于自动化构建 Docker 镜像。每个指令对应一个镜像层,Docker 通过执行这些指令来创建最终的镜像。以下是 Dockerfile 的基本语法和常用指令:

FROM

指定基础镜像。所有 Dockerfile 都必须以 FROM 指令开始,它定义了构建镜像的基础。

dockerfile
FROM ubuntu:20.04

RUN

用于在镜像中执行命令。每个 RUN 指令都会在当前镜像层上创建一个新的层。

dockerfile
RUN apt-get update && apt-get install -y nginx

CMD

指定容器启动时默认执行的命令。一个 Dockerfile 中只能有一个 CMD 指令,如果有多个,只有最后一个会生效。

dockerfile
CMD ["nginx", "-g", "daemon off;"]
  • ENTRYPOINT

与 CMD 类似,但 ENTRYPOINT 指定的命令不会被覆盖,而是作为容器的主程序运行。

dockerfile
ENTRYPOINT ["echo", "Hello, World!"]

COPY

将宿主机文件复制到镜像中。

dockerfile
COPY index.html /usr/share/nginx/html/

ADD

与 COPY 类似,但 ADD 还可以从 URL 下载文件。

dockerfile
ADD https://example.com/file.tar.gz /usr/local/bin/file.tar.gz

ENV

设置环境变量。

dockerfile
ENV MY_ENV=value

ARG

定义构建时的变量。与 ENV 不同,ARG 只在构建过程中有效,不会在容器运行时存在。

dockerfile
ARG MY_ENV
RUN echo $MY_ENV

WORKDIR

设置工作目录。后续的 RUN, CMD, ENTRYPOINT, COPY, 和 ADD 指令都会在这个目录下执行。

dockerfile
WORKDIR /app

EXPOSE

声明容器运行时监听的端口。这只是一个声明,实际映射端口需要在运行容器时指定。

dockerfile
EXPOSE 80

VOLUME

创建一个挂载点,用于持久化数据或与主机共享数据。

dockerfile
VOLUME /data

LABEL

为镜像添加元数据,通常用于描述镜像的版本、作者等信息。

dockerfile
LABEL version="1.0" author="John Doe"

USER

指定运行容器时的用户名或 UID。

dockerfile
USER nginx

HEALTHCHECK

定义容器的健康检查命令,Docker 会定期执行该命令来检查容器的健康状况。

dockerfile
HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

SHELL

指定 RUN, CMD, 和 ENTRYPOINT 指令使用的 shell。

dockerfile
SHELL ["/bin/bash", "-c"]

ONBUILD

用于在当前镜像被作为基础镜像时,触发后续指令的执行。

dockerfile
ONBUILD RUN echo "This layer will be built when the current image is used as a base image."

STOPSIGNAL

设置容器停止时发送的系统调用信号。 。

dockerfile
STOPSIGNAL SIGTERM