镜像基础操作

Docker 镜像的拉取、查看、删除等基础操作


📋 目录


镜像拉取

docker pull

从仓库拉取镜像。

# 拉取最新版本
docker pull nginx
 
# 拉取指定版本
docker pull nginx:1.21
docker pull ubuntu:20.04
 
# 拉取指定仓库的镜像
docker pull registry.example.com/myapp:latest
 
# 拉取所有标签
docker pull -a nginx

拉取进度说明

  • Pulling fs layer:正在下载文件系统层
  • Downloading:正在下载层数据
  • Extracting:正在解压层数据
  • Pull complete:拉取完成

镜像查看

docker images / docker image ls

列出本地镜像。

# 列出所有镜像
docker images
 
# 列出所有镜像(包括中间层)
docker images -a
 
# 只显示镜像 ID
docker images -q
 
# 按格式输出
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
 
# 过滤镜像
docker images nginx
docker images nginx:1.21
docker images --filter "dangling=true"  # 显示悬空镜像
docker images --filter "before=nginx:1.20"  # 显示指定镜像之前的镜像

输出字段说明

  • REPOSITORY:镜像仓库名
  • TAG:镜像标签
  • IMAGE ID:镜像 ID(SHA256 摘要的前12位)
  • CREATED:创建时间
  • SIZE:镜像大小

镜像删除

docker rmi / docker image rm

删除镜像。

# 删除单个镜像
docker rmi nginx:1.21
 
# 删除多个镜像
docker rmi nginx:1.21 nginx:1.20
 
# 通过镜像 ID 删除
docker rmi abc123def456
 
# 强制删除(即使有容器使用)
docker rmi -f nginx:1.21
 
# 删除所有未使用的镜像
docker image prune
 
# 删除所有未使用的镜像(包括有标签的)
docker image prune -a
 
# 删除所有悬空镜像
docker image prune -f

删除前检查

# 查看哪些容器使用了该镜像
docker ps -a --filter ancestor=nginx:1.21
 
# 先删除使用该镜像的容器
docker rm $(docker ps -a -q --filter ancestor=nginx:1.21)

镜像标签管理

docker tag

给镜像打标签。

# 创建新标签(指向同一镜像)
docker tag nginx:latest nginx:1.21
 
# 标记镜像准备推送到仓库
docker tag myapp:latest username/myapp:v1.0
docker tag myapp:latest registry.example.com/myapp:latest
 
# 查看镜像的所有标签
docker images myapp

标签命名规范

[仓库地址/][用户名/]镜像名[:标签]

示例:

  • nginx:latest - Docker Hub 官方镜像
  • username/myapp:v1.0 - 用户自定义镜像
  • registry.example.com/project/app:latest - 私有仓库镜像

镜像导出与导入

docker save

导出镜像到文件。

# 导出单个镜像
docker save -o nginx.tar nginx:latest
 
# 导出多个镜像
docker save -o images.tar nginx:latest ubuntu:20.04
 
# 使用 gzip 压缩
docker save nginx:latest | gzip > nginx.tar.gz

docker load

从文件导入镜像。

# 从文件导入镜像
docker load -i nginx.tar
 
# 从标准输入导入
docker load < nginx.tar
 
# 从压缩文件导入
gunzip -c nginx.tar.gz | docker load

使用场景

  • 离线环境:在没有网络的环境中部署镜像
  • 镜像备份:备份重要镜像
  • 镜像迁移:在不同环境间迁移镜像

镜像详细信息

docker inspect

查看镜像详细信息。

# 查看镜像详细信息
docker inspect nginx:latest
 
# 查看特定信息
docker inspect -f '{{.Config.Env}}' nginx:latest
docker inspect -f '{{.Config.Cmd}}' nginx:latest
docker inspect -f '{{.Created}}' nginx:latest
docker inspect -f '{{.Size}}' nginx:latest
 
# 查看镜像的层信息
docker inspect -f '{{.RootFS.Layers}}' nginx:latest

docker history

查看镜像构建历史。

# 查看镜像构建历史
docker history nginx:latest
 
# 不截断输出
docker history --no-trunc nginx:latest
 
# 按格式输出
docker history --format "table {{.ID}}\t{{.CreatedBy}}\t{{.Size}}" nginx:latest

docker image inspect

查看镜像详细信息(新命令格式)。

# 查看镜像详细信息
docker image inspect nginx:latest
 
# 查看镜像大小
docker image inspect nginx:latest --format '{{.Size}}'

镜像搜索

在 Docker Hub 搜索镜像。

# 搜索镜像
docker search nginx
 
# 限制搜索结果数量
docker search --limit 5 nginx
 
# 只显示官方镜像
docker search --filter "is-official=true" nginx
 
# 只显示自动构建的镜像
docker search --filter "is-automated=true" nginx

镜像清理

清理未使用的镜像

# 删除所有悬空镜像
docker image prune
 
# 删除所有未使用的镜像(包括有标签的)
docker image prune -a
 
# 删除指定时间之前的镜像
docker image prune -a --filter "until=24h"
 
# 交互式删除
docker image prune -a --filter "until=24h" --interactive

查看镜像占用空间

# 查看镜像占用空间
docker system df
 
# 详细查看镜像占用空间
docker system df -v

实用技巧

批量操作

# 批量删除镜像
docker rmi $(docker images -q)
 
# 批量删除特定仓库的镜像
docker rmi $(docker images -q nginx)
 
# 批量导出镜像
for image in $(docker images -q); do
  docker save -o ${image}.tar ${image}
done

镜像大小优化

# 查看镜像各层大小
docker history --human nginx:latest
 
# 比较镜像大小
docker images --format "{{.Repository}}:{{.Tag}} - {{.Size}}"

📚 参考资源


相关笔记