3、Docker镜像管理:拉取镜像、查看镜像、删除镜像、镜像标签与导出导入
Docker 镜像是容器化环境的基石。在任务调度 DAG 的边界调试中,镜像管理直接决定了环境的一致性与可复现性。本节将系统讲解镜像的拉取、查看、删除、标签管理以及导出导入操作,帮助你在本地与生产环境之间高效传递容器化任务依赖。
3.1 镜像拉取与查看
docker pull 命令用于从镜像仓库(默认 Docker Hub)下载指定镜像。拉取时需明确镜像名称与标签(Tag),若不指定标签,默认拉取 latest。
核心语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
常用拉取示例:
# 拉取指定版本
docker pull python:3.11-slim
# 拉取官方最新版
docker pull ubuntu:latest
# 从私有仓库拉取
docker pull registry.example.com/myapp:v1.2
拉取完成后,使用 docker images 或 docker image ls 查看本地镜像列表:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3.11-slim a1b2c3d4e5f6 2 weeks ago 125MB
ubuntu latest f7g8h9i0j1k2 4 weeks ago 77.8MB
nginx alpine l3m4n5o6p7q8 6 weeks ago 23.5MB
| 字段 | 说明 | 用途 |
|---|---|---|
| REPOSITORY | 镜像仓库名称 | 标识镜像来源与名称空间 |
| TAG | 镜像标签(版本号) | 区分同一仓库的不同版本 |
| IMAGE ID | 镜像唯一标识(SHA256 前 12 位) | 用于精确引用镜像 |
| CREATED | 镜像创建时间 | 判断镜像新旧程度 |
| SIZE | 镜像占用磁盘大小 | 评估存储与传输成本 |
最佳实践: 在 DAG 任务调度场景中,始终使用明确版本标签(如
python:3.11-slim)而非 latest,避免因镜像更新导致任务环境不一致。
3.2 镜像删除与清理
使用 docker rmi 或 docker image rm 删除本地镜像。删除前需确保没有容器正在使用该镜像。
# 通过名称:标签删除
docker rmi python:3.11-slim
# 通过 IMAGE ID 删除
docker rmi a1b2c3d4e5f6
# 强制删除(即使有容器引用)
docker rmi -f a1b2c3d4e5f6
批量清理无标签(dangling)镜像:
docker image prune
# 清理所有未使用的镜像(包括未被容器引用的)
docker image prune -a
注意: 删除镜像前务必确认该镜像未被任何容器(包括已停止的容器)引用。使用
docker ps -a 检查容器状态,避免误删导致容器无法启动。
3.3 镜像标签管理
docker tag 命令为本地镜像添加额外标签,不复制镜像层数据,仅创建引用别名。标签常用于版本标记、环境区分(dev/staging/prod)以及推送前的仓库重命名。
# 语法:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 为本地镜像添加版本标签
docker tag python:3.11-slim myapp/python:3.11
# 为推送私有仓库准备标签
docker tag python:3.11-slim registry.example.com/myapp/python:3.11
# 添加多个标签指向同一镜像
docker tag a1b2c3d4e5f6 myapp/python:latest
docker tag a1b2c3d4e5f6 myapp/python:v1.0.0
| 标签策略 | 示例 | 适用场景 |
|---|---|---|
| 语义化版本 | v1.2.3 |
正式发布版本管理 |
| 环境标识 | dev / staging / prod |
多环境部署 |
| 构建标识 | build-20250315 |
CI/CD 流水线追踪 |
| Git 提交哈希 | git-a1b2c3d |
精确回滚与审计 |
3.4 镜像导出与导入
在离线环境或跨网络传输场景中,docker save 和 docker load 提供镜像的完整打包与恢复能力。导出为 tar 归档文件,保留所有镜像层与元数据。
# 导出镜像为 tar 文件
docker save -o python-3.11-slim.tar python:3.11-slim
# 导出多个镜像到同一文件
docker save -o multi-images.tar python:3.11-slim ubuntu:latest
# 从 tar 文件导入镜像
docker load -i python-3.11-slim.tar
# 导入后查看确认
docker images | grep python
关键区别:
docker save导出完整镜像(含所有层与标签),适合备份与迁移。docker export导出容器的文件系统(不含镜像层与元数据),仅用于容器快照。
以下 SVG 图展示了镜像管理的完整生命周期,从拉取到导出导入的流转路径:
3.5 镜像管理综合对比
下表汇总了镜像管理各命令的核心参数与适用场景,便于在 DAG 任务调度环境中快速决策:
| 命令 | 核心参数 | 适用场景 | 注意事项 |
|---|---|---|---|
docker pull |
--platform、--all-tags |
首次获取镜像、更新版本 | 指定平台避免架构不匹配 |
docker images |
--filter、--format |
查看本地镜像清单、磁盘占用 | 配合 --filter dangling=true 查找无用镜像 |
docker rmi |
-f(强制) |
清理过期镜像、释放磁盘空间 | 先停止关联容器,避免强制删除 |
docker tag |
源镜像:标签 目标镜像:标签 | 版本标记、仓库重命名、多环境标识 | 标签不占用额外存储空间 |
docker save |
-o(输出文件) |
离线传输、备份、跨网络迁移 | 导出为 tar,保留完整镜像层 |
docker load |
-i(输入文件) |
从 tar 恢复镜像到本地 | 导入后需检查标签是否正确 |
DAG 调度场景建议:
- 在 CI/CD 流水线中,使用
docker tag将构建产物标记为build-{commit_sha},确保每次调度任务可追溯。 - 在离线集群中,提前使用
docker save导出基础镜像,通过docker load批量导入所有节点,避免重复拉取。 - 定期执行
docker image prune -a清理未使用的镜像,保持磁盘空间充足。