Dockerfile 是一个文本文件,包含组装 Docker 映像的说明。当通过执行 docker build 命令构建镜像时,Docker 会读取并执行这些指令,从而生成镜像。
下面介绍如何为一个应用创建 Dockerfile。先在项目根目录新建一个名为 Dockerfile 的文件并用文本编辑器打开。
第一行可以添加 # syntax 解析器指令。虽然可选,但它指示构建器使用的语法版本,并在需要时启用对 BuildKit 的兼容性。解析器指令应位于文件的最前端,其它注释、空格或指令均位于其后。
推荐使用 docker/dockerfile:1,它始终指向最新的 1 语法版本。BuildKit 构建前会自动检查更新,确保使用最新的语法。
接着在 Dockerfile 中添加一行,指定应用所需的基础镜像。
FROM Python:3.8-slim-buster
镜像可以从其他镜像继承,因此选择官方 Python 映像作为基础镜像,确保运行 Python 应用所需的工具和依赖已就绪。
为了便于后续操作,创建一个工作目录,指示 Docker 以该路径作为后续命令的默认工作位置。这样就可以使用相对路径,省去完整路径的输入。
WORKDIR /app
通常在下载 Python 项目后,第一步是安装依赖包,以确保应用所需的所有依赖就位。
需要将 requirements.txt 文件放入镜像中,可以通过 COPY 指令完成。COPY 共有两个参数:源文件和目标路径。将 requirements.txt 复制到工作目录 /app 下。
COPY requirements.txt requirements.txt
requirements.txt 就位后,使用 RUN 指令执行安装命令,将依赖安装到镜像中。
RUN pip3 install -r requirements.txt
此时已经构建了一个基于 Python 3.8 的镜像,并安装了依赖。下一步是把应用源码添加到镜像中。可以用与上文同样的 COPY 方式处理。
COPY . .
COPY 指令将当前目录中的所有文件复制到镜像中。最后,指定容器启动时要执行的命令。使用 CMD 指定入口命令,并确保应用对外可访问(例如 –host=0.0.0.0)。
CMD [“python3”, “-m”, “flask”, “run”, “–host=0.0.0.0”]
以下是完整的 Dockerfile 示例,仅做参考。
FROM Python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [“python3”, “-m”, “flask”, “run”, “–host=0.0.0.0”]
