Docker 打包与分发完全指南
🐳 Docker 打包与分发完全指南
本指南整理了使用 Docker 构建、打包、导出、分发镜像的完整流程,特别适用于 将 AI 项目打包发给客户部署 的场景。
🧠 一、Docker 打包的基本原理
Docker 镜像是一种可移植的运行环境快照,构建流程遵循:
- 读取
Dockerfile
,按步骤逐层构建镜像 - 每一步生成一层“快照”(称为镜像层)
- 所有层组合起来,成为最终镜像,具有唯一
镜像ID
- 可通过
docker run
运行为容器,拥有隔离的网络、文件系统、环境
构建完成后,可使用 docker save
将镜像导出为 .tar
文件,并通过 docker load
恢复。
📷 镜像层快照机制通俗解释
Docker 构建过程就像是录制“做菜视频”:
- 每条
Dockerfile
指令都会生成一个“快照层”,记录了这一层对文件系统的改动 - 所有快照层按顺序叠加,形成最终可运行镜像
- Docker 可以缓存未改动的层,从而加速构建
🎯 示例:Dockerfile 快照层叠加示意
FROM python:3.10-slim
COPY app.py /app/
RUN pip install flask
RUN echo "Hello" > /hello.txt
构建时生成的层结构如下:
层编号 | Dockerfile 指令 | 内容说明 |
---|---|---|
第1层 | FROM |
Python 基础系统 |
第2层 | COPY app.py |
拷贝你的代码文件 |
第3层 | RUN pip install |
安装 Flask,新增依赖 |
第4层 | RUN echo |
写入 hello.txt 文件 |
你可以使用以下命令查看构建层:
docker history deepseekmine:0.6.1
🧱 二、镜像构建:开发环境常用
docker build -t deepseekmine:0.6.1 .
参数 | 含义 |
---|---|
-t |
指定镜像名称与标签,如 deepseekmine:0.6.1 |
. |
当前目录(需包含 Dockerfile) |
若希望镜像可在 Windows 等 amd64 平台使用,请在 Mac 上添加平台参数:
docker build --platform=linux/amd64 -t deepseekmine:0.6.1 .
📦 三、导出镜像供客户部署
导出镜像为 .tar
文件:
docker save -o deepseekmine-0.6.1.tar deepseekmine:0.6.1
其他依赖镜像(如 node、python、meilisearch)也建议提前导出:
docker pull getmeili/meilisearch:v1.6
docker save -o meilisearch-v1.6.tar getmeili/meilisearch:v1.6
建议统一打包为 zip 或 tar.gz 分发,并附带 docker-compose.yml
。
🚀 四、启动服务(推荐使用 docker-compose)
使用 docker-compose.yml
可一次性启动多个容器:
docker-compose up -d
如需停止并清理:
docker-compose down
注意: 仅运行 deepseekmine
镜像无法正常使用,因为依赖 MeiliSearch 等服务。
🔍 五、容器运维常用命令
查看日志
docker logs -f deepseekmine
进入容器内部
docker exec -it deepseekmine bash
查看镜像与容器
docker ps # 正在运行的容器
docker ps -a # 所有容器
docker images # 本地所有镜像
停止 & 删除容器
docker stop deepseekmine
docker rm deepseekmine
删除镜像
docker rmi deepseekmine:0.6.1
清理系统中未使用资源
docker system prune -a --volumes -f
📋 六、完整分发结构建议(发给客户)
📦 deepseekmine-install.zip
├── deepseekmine-0.6.1.tar
├── node-20.tar
├── python-3.10-slim.tar
├── meilisearch-v1.6.tar
├── docker-compose.yml
└── README.md
🧪 七、Mac 上构建,Windows 上部署的命令组合
构建适用于 Windows 的镜像(Mac 上)
docker build --platform=linux/amd64 -t deepseekmine:latest .
导出镜像为 .tar
docker save -o deepseekmine.tar deepseekmine:latest
在 Windows 上导入镜像
docker load -i deepseekmine.tar
启动服务容器
docker run -d --name deepseekmine -p 3000:3000 -p 5001:5001 deepseekmine:latest
✅ 建议总结
- ✅ 总是使用
docker-compose.yml
统一管理启动逻辑 - ✅ 给镜像明确版本号,便于管理多个版本
- ✅ 为客户预打包所有依赖镜像,减少国内拉取失败风险
- ✅ 了解镜像分层原理,有助于构建更小、更快、更安全的镜像
No next page