跳到主要内容

15 Dockerfile介绍

Dockerfile 是一个文本文件,其中包含了一系列的指令,用于构建一个 Docker 镜像。Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。Dockerfile 的编写遵循特定的格式和指令集,下面将详细介绍 Dockerfile 的结构和常用指令。

Dockerfile 结构

Dockerfile 由一系列指令和参数组成。指令不区分大小写,但是通常使用大写字母来增加可读性。Dockerfile 的指令按照它们出现的顺序执行,每条指令都会在镜像上创建一个新的层。

以下是一个简单的 Dockerfile 示例,用于构建一个简单的 Python Web 应用:

# 使用官方 Python 运行时作为父镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 安装 requirements.txt 中指定的任何所需包
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 使端口 80 可供此容器外的环境使用
EXPOSE 80
# 在容器启动时运行 app.py
CMD ["python", "app.py"]

通过编写 Dockerfile 并使用 docker build 命令,你可以创建一个可重复、可移植的容器镜像。

常用指令

以下是一些在 Dockerfile 中常用的指令:

  • FROM: 指定基础镜像,所有的构建都必须从一个基础镜像开始。

    FROM python:3.8-slim
  • LABEL: 添加元数据到镜像中,例如作者、版本信息等。

    LABEL maintainer="example@example.com"
  • RUN: 在当前镜像层上执行任何命令并提交结果,生成新的镜像层。

    RUN apt-get update && apt-get install -y nginx
  • COPY: 将文件和目录从构建上下文复制到镜像中。

    COPY . /app
  • ADD: 与 COPY 类似,但 ADD 具有更多的功能,如自动解压压缩文件。

    ADD main.py /app/
  • WORKDIR: 设置工作目录,之后的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令都会在该目录下执行。

    WORKDIR /app
  • VOLUME: 创建一个可以从本地主机或其他容器挂载的挂载点。

    VOLUME /data
  • EXPOSE: 声明容器运行时将监听的端口。

    EXPOSE 80
  • ENV: 设置环境变量,这些变量将在容器运行时保持。

    ENV PATH="/usr/local/nginx/bin:$PATH"
  • CMD: 容器启动时执行的命令。Dockerfile 中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。

    CMD ["nginx", "-g", "daemon off;"]
  • ENTRYPOINT: 配置容器启动时运行的命令。与 CMD 类似,但不会被 docker run 的命令行参数覆盖。

    ENTRYPOINT ["nginx"]
  • USER: 设置运行容器的用户。

    USER nginx
  • HEALTHCHECK: 设置容器的健康检查。

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