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 图展示了镜像管理的完整生命周期,从拉取到导出导入的流转路径:

Docker 镜像管理生命周期 远程镜像仓库 Docker Hub / 私有仓库 docker pull 本地镜像存储 /var/lib/docker/ docker images 查看 docker tag 打标签 docker rmi 删除 tar 归档文件 .tar 离线包 docker save docker load 操作说明: 1. 从远程仓库拉取镜像到本地存储 2. 本地可查看、打标签、删除镜像 3. 通过 save/load 实现离线传输与备份

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 清理未使用的镜像,保持磁盘空间充足。