Dockerfile介绍
Dockerfile 是一个文本文件,其中包含了一系列的指令,用于构建一个 Docker 镜像。Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。Dockerfile 的编写遵循特定的格式和指令集,下面将详细介绍 Dockerfile 的结构和常用指令。
Dockerfile 结构
Dockerfile 由一系列指令和参数组成。指令不区分大小写,但是通常使用大写字母来增加可读性。Dockerfile 的指令按照它们出现的顺序执行,每条指令都会在镜像上创建一个新的层。
以下是一个简单的 Dockerfile 示例,用于构建一个简单的 Python Web 应用:
dockerfile
# 使用官方 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: 指定基础镜像,所有的构建都必须从一个基础镜像开始。
dockerfile
FROM python:3.8-slim - LABEL: 添加元数据到镜像中,例如作者、版本信息等。
dockerfile
LABEL maintainer="example@example.com" - RUN: 在当前镜像层上执行任何命令并提交结果,生成新的镜像层。
dockerfile
RUN apt-get update && apt-get install -y nginx - COPY: 将文件和目录从构建上下文复制到镜像中。
dockerfile
COPY . /app - ADD: 与 COPY 类似,但 ADD 具有更多的功能,如自动解压压缩文件。
dockerfile
ADD main.py /app/ - WORKDIR: 设置工作目录,之后的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令都会在该目录下执行。
dockerfile
WORKDIR /app - VOLUME: 创建一个可以从本地主机或其他容器挂载 的挂载点。
dockerfile
VOLUME /data - EXPOSE: 声明容器运行时将监听的端口。
dockerfile
EXPOSE 80 - ENV: 设置环境变量,这些变量将在容器运行时保持。
dockerfile
ENV PATH="/usr/local/nginx/bin:$PATH" - CMD: 容器启动时执行的命令。Dockerfile 中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。
dockerfile
CMD ["nginx", "-g", "daemon off;"] - ENTRYPOINT: 配置容器启动时运行的命令。与 CMD 类似,但不会被 docker run 的命令行参数覆盖。
dockerfile
ENTRYPOINT ["nginx"] - USER: 设置运行容器的用户。
dockerfile
USER nginx - HEALTHCHECK: 设置容器的健康检查。
dockerfile
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost/ || exit 1