Dockerfile
Dockerfile 是一个文本文件,包含了一系列指令,用于自动化构建 Docker 镜像。每个指令对应一个镜像层,Docker 通过执行这些指令来创建最终的镜像。以下是 Dockerfile 的基本语法和常用指令:
FROM
指定基础镜像。所有 Dockerfile 都必须以 FROM 指令开始,它定义了构建镜像的基础。
dockerfile
FROM ubuntu:20.04RUN
用于在镜像中执行命令。每个 RUN 指令都会在当前镜像层上创建一个新的层。
dockerfile
RUN apt-get update && apt-get install -y nginxCMD
指定容器启动时默认执行的命令。一个 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.gzENV
设置环境变量。
dockerfile
ENV MY_ENV=valueARG
定义构建时的变量。与 ENV 不同,ARG 只在构建过程中有效,不会在容器运行时存在。
dockerfile
ARG MY_ENV
RUN echo $MY_ENVWORKDIR
设置工作目录。后续的 RUN, CMD, ENTRYPOINT, COPY, 和 ADD 指令都会在这个目录下执行。
dockerfile
WORKDIR /appEXPOSE
声明容器运行时监听的端口。这只是一个声明,实际映射端口需要在运行容器时指定。
dockerfile
EXPOSE 80VOLUME
创建一个挂载点,用于持久化数据或与主机共享数据。
dockerfile
VOLUME /dataLABEL
为镜像添加元数据,通常用于描述镜像的版本、作者等信息。
dockerfile
LABEL version="1.0" author="John Doe"USER
指定运行容器时的用户名或 UID。
dockerfile
USER nginxHEALTHCHECK
定义容器的健康检查命令,Docker 会定期执行该命令来检查容器的健康状况。
dockerfile
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1SHELL
指定 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