Dockerfile 是一个用于定义 Docker 镜像构建过程的脚本文件,其中包含了一系列指令,用于指定如何构建和配置镜像。以下是一些常用的 Dockerfile 指令及其示例用法:
1. FROM
指定基础镜像,Dockerfile 必须以该指令开始。
示例:
bash
FROM ubuntu:20.04
这行表示以 Ubuntu 20.04 作为基础镜像。
2. RUN
执行命令行指令,通常用于安装软件包或进行系统配置。
示例:
bash
RUN apt-get update && apt-get install -y curl
这行表示在镜像中更新包列表并安装 curl
。
3. COPY
将文件或目录从构建上下文复制到镜像中。
示例:
bash
COPY ./myapp /app
这行表示将当前目录下的 myapp
文件夹复制到镜像中的 /app
目录。
4. ADD
类似于 COPY
,但支持自动解压 tar 文件并且可以从 URL 直接下载文件。
示例:
bash
ADD myapp.tar.gz /app
5. WORKDIR
设置工作目录,此后的命令将在该目录下执行。
示例:
bash
WORKDIR /app
这行表示设置 /app
为工作目录。
6. CMD
指定容器启动时执行的命令。Dockerfile 中只能有一个 CMD
,多个会被覆盖。
示例:
bash
CMD ["python", "app.py"]
这行表示容器启动时执行 python app.py
命令。
7. ENTRYPOINT
类似于 CMD
,但通常用于定义一个固定的命令,CMD
的参数会被附加到 ENTRYPOINT
的后面。
示例:
bash
ENTRYPOINT ["python"]
CMD ["app.py"]
这行表示容器启动时执行 python app.py
,用户运行容器时提供的参数会附加在 python
命令后面。
8. ENV
设置环境变量,构建时和运行时都可以使用。
示例:
bash
ENV APP_HOME /app
这行表示设置环境变量 APP_HOME
为 /app
。
9. EXPOSE
声明容器暴露的端口,通常用于文档目的。
示例:
bash
EXPOSE 8080
这行表示容器将暴露 8080
端口。
10. VOLUME
创建一个挂载点,指定将来容器运行时可以将宿主机目录挂载到该点。
示例:
bash
VOLUME /data
这行表示在 /data
目录创建一个挂载点。
11. USER
指定运行后续命令的用户,默认为 root。
示例:
bash
USER nobody
这行表示之后的命令将以 nobody
用户运行。
12. ARG
定义构建时的参数,可以在构建时通过 --build-arg
传递值。
示例:
bash
ARG VERSION=1.0
RUN echo "Building version $VERSION"
这行表示定义了构建时的参数 VERSION
,并在运行命令时使用它。
13. LABEL
添加元数据到镜像中,通常用于描述镜像信息。
示例:
bash
LABEL maintainer="yourname@example.com"
这行表示为镜像添加了维护者信息。
14. HEALTHCHECK
指定容器的健康检查命令,以便 Docker 可以定期检查容器是否正常工作。
示例:
bash
HEALTHCHECK CMD curl --fail http://localhost:8080/ || exit 1
这行表示每次运行 curl
命令检查服务状态,失败则认为容器不健康。
15. SHELL
指定后续 RUN
指令使用的 shell,默认是 /bin/sh -c
。
示例:
bash
SHELL ["/bin/bash", "-c"]
这行表示后续的 RUN
指令将使用 bash
来执行。
这些指令可以组合使用,定义出一个功能强大的 Dockerfile,帮助你构建所需的 Docker 镜像。