Dockerfile 是用于定义 Docker 镜像构建过程的文本文件。它包含了一系列指令,每条指令都会在镜像中创建一个新的层。以下是 Dockerfile 中常用的指令及其详细解释:
1. FROM
指定基础镜像。所有的 Dockerfile 都必须以 FROM
指令开始。
FROM ubuntu:20.04
2. RUN
在镜像构建过程中执行命令。每条 RUN
指令都会在当前镜像之上创建一个新的层。
RUN apt-get update && apt-get install -y vim
3. CMD
设置容器启动时默认执行的命令。一个 Dockerfile 中只能有一个 CMD
指令。
CMD ["python", "app.py"]
4. LABEL
为镜像添加元数据,如作者、版本、描述等。
LABEL maintainer="john@example.com" version="1.0" description="My custom Docker image"
5. EXPOSE
声明容器运行时监听的端口。
EXPOSE 8080
6. ENV
设置环境变量。
ENV MY_VAR=my_value
7. ADD
将文件、目录或远程文件 URL 复制到镜像中。ADD
指令会自动解压压缩文件。
ADD myfile.tar.gz /app/
8. COPY
将文件或目录从主机复制到镜像中。与 ADD
不同,COPY
不会自动解压文件。
COPY . /app/
9. ENTRYPOINT
设置容器启动时执行的命令。与 CMD
不同,ENTRYPOINT
指令的参数不会被命令行参数覆盖。
ENTRYPOINT ["python", "app.py"]
10. VOLUME
创建一个挂载点,用于持久化存储或共享数据。
VOLUME /data
11. USER
设置运行容器的用户。
USER myuser
12. WORKDIR
设置工作目录。后续的 RUN
、CMD
、ENTRYPOINT
、COPY
和 ADD
指令都会在这个目录下执行。
WORKDIR /app
13. ARG
定义构建参数。
ARG MY_ARG=default_value
14. ONBUILD
设置触发器,当该镜像被用作另一个镜像的基础镜像时,触发器指令会被执行。
ONBUILD COPY . /app
15. HEALTHCHECK
设置健康检查命令,用于检查容器的健康状态。
HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl -f http://localhost:8080/ || exit 1
16. SHELL
设置默认的 shell 类型。
SHELL ["/bin/bash", "-c"]
示例 Dockerfile
以下是一个综合示例,展示了多个 Dockerfile 指令的使用:
# 使用官方的 Python 基础镜像
FROM python:3.8-slim
# 设置元数据
LABEL maintainer="john@example.com" version="1.0" description="My custom Docker image"
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装依赖
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用程序代码
COPY . /app
# 暴露端口
EXPOSE 5000
# 设置环境变量
ENV FLASK_ENV=production
# 设置默认命令
CMD ["python", "app.py"]