Dockerfile常用指令介绍
Dockerfile是一个文本文件,用于定义Docker镜像的构建过程。下面介绍一些最常用的Dockerfile指令及其用法:
基础指令
FROM - 指定基础镜像
FROM python:3.9-slim
这是Dockerfile的第一个指令,用于指定构建镜像的基础镜像。
MAINTAINER (已弃用) / LABEL - 设置镜像元数据
LABEL maintainer="yourname@example.com"
用于添加镜像的作者或其他元数据信息。
RUN - 在镜像中执行命令
RUN apt-get update && apt-get install -y python3-dev
用于在构建镜像时执行命令,通常用于安装软件包。
COPY - 复制文件到镜像
COPY ./app /app
第一个参数是源路径,表示要复制的文件或目录
第二个参数是目标路径(destination path),表示文件将被复制到镜像中的位置
从构建上下文复制文件或目录到镜像中。ADD - 更高级的复制指令
ADD ./app.tar.gz /app
类似于COPY,但可以处理远程URL和自动解压压缩文件。
环境配置
ENV - 设置环境变量
ENV PYTHONUNBUFFERED 1
为镜像设置环境变量,这些变量在容器运行时也会存在。
WORKDIR - 设置工作目录
WORKDIR /app
设置RUN、CMD、ENTRYPOINT、COPY和ADD命令的工作目录。
容器运行时配置
- CMD - 设置容器启动时默认执行的命令
CMD ["python", "app.py"]
每个 Dockerfile 只能有一个 CMD 指令
如果指定多个,只有最后一个会生效
可以被 docker run 命令后的参数覆盖
ENTRYPOINT - 设置容器入口点
ENTRYPOINT ["python", "app.py"] CMD ["--help"]
设置容器启动时执行的命令,且不会被docker run命令覆盖,但可以追加参数。
EXPOSE - 声明容器端口
EXPOSE 8000
声明容器运行时提供服务的端口,但不会自动映射端口。
VOLUME - 创建挂载点
VOLUME /data
创建可以从本地主机或其他容器挂载的挂载点。
用户和权限
- USER - 设置运行命令的用户
设置RUN、CMD和ENTRYPOINT命令执行的用户。USER appuser
健康检查
- HEALTHCHECK - 设置健康检查
为容器设置健康检查命令。HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/ || exit 1
简单示例
下面是一个简单的Python Flask应用的Dockerfile示例:
这个Dockerfile的工作流程是:
- 基于Python 3.9的轻量级镜像
- 设置工作目录为/app
- 复制requirements.txt并安装依赖
- 复制应用代码到镜像中
- 暴露5000端口
- 设置Flask应用的环境变量
- 定义容器启动时运行的命令
学习Dockerfile最好的方法是实践,建议你尝试构建一些简单的镜像,然后逐步学习更复杂的用法。
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 5000
# 设置环境变量
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
# 运行应用
CMD ["flask", "run"]