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