3. Docker镜像管理:镜像的拉取、查看、删除、导出导入、使用Docker Hub与私有仓库

Docker 镜像是容器化部署的核心构件,它本质上是一个轻量级、可执行的独立软件包,包含运行某软件所需的所有内容:代码、运行时、系统工具、系统库和设置。在 DAG 任务调度场景中,精确管理镜像版本、高效分发镜像至集群节点、以及保障镜像供应链安全,是维持调度系统稳定性的基石。本章将系统讲解镜像的完整生命周期管理操作。

3.1 镜像拉取与查看

镜像管理的第一步是从仓库获取目标镜像。Docker 默认从官方公共仓库 Docker Hub 拉取,但也可指定第三方或私有仓库地址。

3.1.1 拉取镜像

使用 docker pull 命令从仓库下载镜像到本地。语法格式如下:

# 从 Docker Hub 拉取官方镜像(默认 latest 标签)
docker pull nginx

# 拉取指定标签的镜像
docker pull nginx:1.25-alpine

# 从私有仓库拉取镜像
docker pull registry.example.com:5000/my-dag-scheduler:v2.1.0

# 拉取时指定平台架构(多架构镜像场景)
docker pull --platform linux/amd64 python:3.11-slim
最佳实践:在生产 DAG 调度环境中,始终使用明确的版本标签(如 v2.1.0),避免使用 latest 标签。这能确保调度集群所有节点运行完全一致的镜像版本,防止因隐式更新导致的非预期行为。

3.1.2 查看本地镜像

拉取完成后,使用 docker images 或 docker image ls 列出本地存储的镜像清单。

docker images

# 输出示例:
REPOSITORY          TAG            IMAGE ID       CREATED        SIZE
nginx               1.25-alpine    a6b72b8b8c9e   2 weeks ago    42.6MB
python              3.11-slim      7e3b7c7b9c1d   3 weeks ago    125MB
my-dag-scheduler    v2.1.0         9f8e2d1c3a4b   5 days ago     890MB

常用查看选项:

命令 说明
docker images -a 显示所有镜像(包含中间层镜像)
docker images --digests 显示镜像的摘要(Digest)值,用于精确版本校验
docker images --filter "dangling=true" 仅显示悬空镜像(无标签、无引用的镜像层)
docker image inspect nginx:1.25-alpine 查看镜像的详细元数据(JSON 格式)
镜像拉取与查看流程 用户/CI系统 docker pull 镜像仓库 Docker Hub / 私有仓库 本地镜像存储 docker images 镜像清单 REPOSITORY 💡 关键点: 拉取时指定精确标签 + 查看时校验 Digest = 确保 DAG 集群镜像一致性。

3.2 删除镜像

随着 DAG 任务迭代,本地会积累大量历史镜像版本,占用磁盘空间。及时清理无用镜像是运维常态。

3.2.1 删除单个镜像

# 通过仓库名:标签删除
docker rmi nginx:1.25-alpine

# 通过镜像 ID 删除
docker rmi a6b72b8b8c9e

# 强制删除(即使有容器引用)
docker rmi -f a6b72b8b8c9e

3.2.2 批量清理策略

场景 命令 说明
删除所有悬空镜像 docker image prune 清理无标签、无引用的中间层镜像
删除所有未使用的镜像 docker image prune -a 清理未被任何容器引用的镜像
按时间过滤删除 docker image prune -a --filter "until=24h" 删除 24 小时前创建的未使用镜像
批量删除特定仓库镜像 docker images | grep "my-dag" | awk '{print $3}' | xargs docker rmi 通过管道组合命令批量操作
注意:执行 docker rmi 前,请确认没有正在运行的容器依赖该镜像。强制删除(-f)可能导致运行中的容器异常退出。在 DAG 调度集群中,建议先停止关联任务,再执行镜像清理。

3.3 镜像导出与导入

在离线环境或跨网络传输场景中,无法直接使用 docker pull。此时需要将镜像导出为 tar 归档文件,再导入到目标主机。

3.3.1 导出镜像

# 将镜像保存为 tar 文件
docker save -o dag-scheduler-v2.1.0.tar my-dag-scheduler:v2.1.0

# 同时导出多个镜像
docker save -o multiple-images.tar nginx:1.25-alpine python:3.11-slim

# 使用 gzip 压缩导出(推荐)
docker save my-dag-scheduler:v2.1.0 | gzip > dag-scheduler-v2.1.0.tar.gz

3.3.2 导入镜像

# 从 tar 文件加载镜像
docker load -i dag-scheduler-v2.1.0.tar

# 从 gzip 压缩文件加载
gunzip -c dag-scheduler-v2.1.0.tar.gz | docker load

# 验证导入结果
docker images | grep my-dag-scheduler
DAG 调度场景应用:当调度集群部署在隔离网络(如金融内网、工业控制网)时,可在有外网的构建机上执行 docker pull + docker save,将镜像打包后通过 U 盘或内部文件服务器传输,再在集群各节点执行 docker load。此流程确保镜像供应链在物理隔离环境中仍可安全交付。

3.4 使用 Docker Hub 与私有仓库

镜像仓库是镜像分发的中枢。Docker Hub 作为默认公共仓库,适合开源项目和个人学习;私有仓库则用于企业级 DAG 调度系统,保障镜像的私密性与可控性。

3.4.1 Docker Hub 操作

# 登录 Docker Hub(交互式输入用户名和密码)
docker login

# 登录指定仓库
docker login registry.example.com:5000

# 推送镜像到 Docker Hub
docker tag my-dag-scheduler:v2.1.0 yourusername/my-dag-scheduler:v2.1.0
docker push yourusername/my-dag-scheduler:v2.1.0

# 登出
docker logout

3.4.2 搭建私有仓库(Harbor / Registry)

企业级 DAG 调度通常使用 Harbor 或 Docker Registry 作为私有仓库。Harbor 提供基于角色的访问控制、镜像复制、漏洞扫描等高级功能。

# 快速启动 Docker Registry(仅用于测试)
docker run -d -p 5000:5000 --name registry registry:2

# 推送镜像到本地私有仓库
docker tag my-dag-scheduler:v2.1.0 localhost:5000/my-dag-scheduler:v2.1.0
docker push localhost:5000/my-dag-scheduler:v2.1.0

# 从私有仓库拉取
docker pull localhost:5000/my-dag-scheduler:v2.1.0

3.4.3 仓库对比

特性 Docker Hub Docker Registry Harbor
部署方式 SaaS 服务 自托管(单容器) 自托管(多组件)
访问控制 公有/私有仓库 无内置认证 RBAC + LDAP/AD
镜像复制 不支持 不支持 支持跨地域复制
安全扫描 付费功能 不支持 内置 Clair/Trivy
适用场景 开源项目、个人 小型团队、测试 企业级生产环境
镜像仓库架构与分发流程 CI/CD 构建机 docker build 私有镜像仓库 Harbor / Registry docker push 镜像分发(docker pull / load) 网络拉取 / 离线导入 DAG 节点 1 docker run DAG 节点 2 docker run DAG 节点 N docker run

3.5 镜像管理最佳实践清单

  • 标签策略:采用语义化版本号(如 v2.1.0)加构建时间戳(如 v2.1.0-20250315),确保镜像版本可追溯。
  • 定期清理:在 CI/CD 流水线末尾执行 docker image prune -a --filter "until=72h",避免构建节点磁盘写满。
  • 镜像签名:使用 Docker Content Trust(DCT)或 Harbor 的 Notary 服务,对镜像进行数字签名,防止篡改。
  • 离线传输:对于跨网络传输,优先使用 docker save + gzip 压缩,可减少 30%-50% 传输体积。
  • 仓库认证:私有仓库务必启用 TLS 和基本认证,避免镜像泄露。Harbor 建议集成 LDAP 实现统一身份管理。
DAG 调度集成提示:在调度系统的配置管理中,将镜像仓库地址、认证凭据、镜像标签作为环境变量或配置项注入,避免硬编码。当需要回滚任务版本时,仅需修改镜像标签并重启容器,无需重新构建整个调度环境。