趋近智
一个Dockerfile定义了Flask预测服务的环境和设置指令。构建Docker镜像就是使用这个文件来创建一个独立的打包文件。这个镜像将应用程序代码、依赖项(如Flask和scikit-learn)、保存的模型文件以及所需的系统库打包在一起。
构建镜像包括指示Docker守护程序读取Dockerfile,执行其中的指令,并创建生成的镜像文件系统层。主要的命令是docker build。
docker build 命令docker build 命令将构建上下文的路径(即包含你的Dockerfile和应用程序文件的目录)作为主要参数。它从这个上下文中读取Dockerfile并开始构建过程。
docker build 命令的一个常见选项是 -t 标志,它代表“标签”(tag)。添加标签可以让你给镜像一个易读的名称,并且可以选择性地添加版本号,从而更方便管理和识别。一个好的做法是使用反映应用程序的名称和版本标签,例如 my-app:1.0 或 prediction-service:0.1。如果你省略版本标签(例如,只使用 prediction-service),Docker会默认使用 latest 标签。
让我们为我们准备好的Flask应用程序构建镜像。
准备构建上下文: 确保你在一个目录下有以下文件。这个目录将是你的构建上下文。
Dockerfile:你在上一节创建的文件。app.py (或你的Flask应用程序脚本名称):包含用于加载模型和提供预测的Flask代码。requirements.txt:列出所需的Python库(例如,flask、joblib、scikit-learn、numpy)。model.joblib (或你保存的模型文件名称):序列化的机器学习模型。进入目录: 打开你的终端或命令提示符,切换到包含这些文件的目录。
cd /path/to/your/flask_app_directory
将 /path/to/your/flask_app_directory 替换为你系统上的实际路径。
运行构建命令: 执行 docker build 命令。我们将把镜像标记为 prediction-service,版本标签为 0.1。末尾的 . 告诉Docker使用当前目录作为构建上下文。
docker build -t prediction-service:0.1 .
当Docker执行此命令时,你将在终端中看到与Dockerfile中定义的每个步骤对应的输出:
Sending build context to Docker daemon 5.8MB # 步骤 1:上下文已发送
Step 1/7 : FROM python:3.9-slim # 拉取基础镜像
---> a1b2c3d4e5f6
Step 2/7 : WORKDIR /app # 设置工作目录
---> Using cache
---> f6e5d4c3b2a1
Step 3/7 : COPY requirements.txt . # 复制 requirements.txt
---> Using cache
---> 1a2b3c4d5e6f
Step 4/7 : RUN pip install --no-cache-dir -r requirements.txt # 安装依赖项
---> Running in abcdef123456
Collecting flask... # pip 安装输出
... (installation output) ...
Removing intermediate container abcdef123456
---> 7f8e9d0c1b2a
Step 5/7 : COPY . . # 复制剩余上下文
---> 3a4b5c6d7e8f
Step 6/7 : EXPOSE 5000 # 暴露端口
---> Running in fedcba987654
Removing intermediate container fedcba987654
---> 9d8c7b6a5f4e
Step 7/7 : CMD ["flask", "run", "--host=0.0.0.0"] # 设置运行命令
---> Running in 123456abcdef
Removing intermediate container 123456abcdef
---> e1f2a3b4c5d6
Successfully built e1f2a3b4c5d6
Successfully tagged prediction-service:0.1
Docker逐层执行每条指令。如果指令和上下文没有改变,它通常会使用之前构建的缓存层,这会显著加快后续构建的速度(由 ---> Using cache 指示)。当执行 RUN 或 COPY 等指令时,Docker可能会创建一个临时的中间容器,执行操作,然后将结果提交为新的镜像层,最后删除中间容器。最终,它会确认构建和标记成功。
构建成功完成后,你可以使用 docker images 或 docker image ls 命令验证镜像是否存在于你的系统上:
docker images
你应该看到你的新镜像已列出,类似于这样:
REPOSITORY TAG IMAGE ID CREATED SIZE
prediction-service 0.1 e1f2a3b4c5d6 2 minutes ago 150MB
python 3.9-slim a1b2c3d4e5f6 2 weeks ago 115MB
... (其他镜像) ...
注意 prediction-service 仓库、0.1 标签、一个唯一的 镜像 ID、创建时间及其大小。
你现在已经成功地将你的Flask预测服务及其所有要求打包成一个Docker镜像。这个镜像是一个便携式组件,它包含在不同环境中一致运行应用程序所需的一切。下一个合理的步骤是使用这个镜像并将其作为容器运行。
这部分内容有帮助吗?
docker build, Docker Documentation, 2024 - 提供关于 docker build 命令的官方权威参考,包括其语法、用于标记的 -t 等选项以及构建上下文的处理,这些都是本节涵盖的核心内容。© 2026 ApX Machine Learning用心打造