Docker文件(Dockerfile)是一个文本文件,包含了一系列用于构建Docker镜像的指令。它定义了容器运行环境的基础配置,包括操作系统、软件包、环境变量、文件复制等操作。
一个典型的Dockerfile由多个指令组成,每条指令都会在镜像中创建一个新的层。以下是Dockerfile的基本结构和常用指令:
# 指定基础镜像
FROM ubuntu:20.04
# 维护者信息(已弃用,推荐使用LABEL)
LABEL maintainer="your.email@example.com"
# 设置环境变量
ENV NODE_ENV=production
ENV APP_PORT=3000
# 设置工作目录
WORKDIR /app
# 更新包索引并安装依赖
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# 使用pip安装Python依赖
RUN pip install --no-cache-dir flask gunicorn
# 复制文件到容器中
COPY requirements.txt .
COPY . .
# 添加文件到容器中(支持URL和解压tar文件)
ADD https://example.com/big.tar.xz /usr/src/things/
# 暴露端口
EXPOSE 3000
# 定义容器启动时执行的命令
CMD ["python", "app.py"]
# 或使用ENTRYPOINT定义可执行程序
ENTRYPOINT ["gunicorn"]
CMD ["--bind", "0.0.0.0:3000", "app:app"]
# 定义构建参数
ARG BUILD_VERSION=1.0
# 定义健康检查
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost:3000/ || exit 1
# 定义卷挂载点
VOLUME ["/data"]
# 使用官方Python运行时作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录内容到容器的工作目录
COPY . .
# 安装项目依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE 5000
# 定义环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
# 运行应用
CMD ["flask", "run", "--host", "0.0.0.0"]
docker build -t my-app .
docker run -p 4000:5000 my-app
Dockerfile的每条指令都会创建一个新的镜像层,因此合理的指令顺序可以优化构建速度和镜像大小。通常建议将不经常变化的指令放在前面,经常变化的指令放在后面。