Docker常用命令-镜像和容器的导出与导入

前言

有时因为网络原因或者是暂时无法重启Docker没法使镜像生效,我们可以把镜像本地构建后导出再导入。

Docker信息

查看docker版本

1
docker version

显示docker系统的信息

1
docker info

镜像导出导入

在 Docker 中,你可以使用 docker savedocker load 命令来导出(export)和导入(import)镜像

注意:这里说的是 镜像(image) 的保存/加载,不是容器(container)的导出(docker export 是针对容器的,会丢失历史层和元数据)。

导出镜像为 tar

1
2
3
4
5
# 拉取镜像(如果尚未存在)
docker pull node:18-bullseye-slim

# 导出为 tar 文件
docker save -o node-18-bullseye-slim.tar node:18-bullseye-slim

生成的 node-18-bullseye-slim.tar 包含完整的镜像层、元数据、标签等。

导入镜像

node-18-bullseye-slim.tar 复制到目标机器(如用 scp、U盘、网络传输等),然后执行:

1
2
# 导入镜像
docker load -i node-18-bullseye-slim.tar

导入后,运行:

1
docker images | grep node

你会看到 node:18-bullseye-slim 已恢复,REPOSITORY 和 TAG 都保留

补充说明

命令 用途 是否保留标签/历史
docker save + docker load 镜像 ↔ tar ✅ 完整保留
docker export + docker import 容器快照 → 镜像 ❌ 丢失历史层、CMD、ENV 等元数据

说明

操作镜像请用 save/load,不要用 export/import

注意事项

  1. 镜像 ID 会变吗?
    不会。只要内容一致,镜像 ID 相同。但如果你重新打标签(tag),会有新标签指向同一 ID。
  2. 能否跨平台使用?
    可以,但必须确保目标机器架构兼容(如都是 linux/amd64)。node:18-bullseye-slim 默认是 amd64,ARM 机器需拉取对应版本。
  3. 国内网络问题?
    如果你是在无外网的内网环境,这种方式非常适合离线部署基础镜像。

容器导入导出

导出 Docker 容器

要把一个正在运行或者已经停止的 Docker 容器导出成一个文件,可以使用 docker export 命令。

以下是具体命令示例:

1
docker export -o <导出文件名.tar> <容器 ID 或名称>
  • -o:指定导出文件的路径和文件名。
  • <导出文件名.tar>:你要导出的文件名,通常以 .tar 结尾。
  • <容器 ID 或名称>:你想要导出的 Docker 容器的 ID 或者名称。

例如,要将名为 my_container 的容器导出为 my_container_export.tar 文件,可以使用以下命令:

1
docker export -o my_container_export.tar my_container

导入 Docker 容器

当你有了导出的容器文件后,就可以使用 docker import 命令将其导入到 Docker 中。

以下是具体命令示例:

1
docker import <导出文件名.tar> <仓库名称:标签>
  • <导出文件名.tar>:你之前导出的容器文件的名称。
  • <仓库名称:标签>:导入后的镜像的名称和标签。

例如,将 my_container_export.tar 文件导入为名为 my_imported_image:latest 的镜像,可以使用以下命令:

1
docker import my_container_export.tar my_imported_image:latest

批量删除

删除容器

Linux

删除所有容器

1
docker rm `docker ps -a -q`

获取退出的容器

1
docker ps -a --filter "status=exited" --format "{{.ID}}: {{.Names}} ({{.Status}})"

删除退出的容器

1
docker ps -a --filter "status=exited" --format "{{.ID}}" | xargs docker rm

Windows上

删除未运行的容器

1
docker container prune

删除镜像

获取悬空镜像

1
docker images -f "dangling=true"

上述命令中的-f参数是过滤器,dangling=true表示只显示悬空镜像,即没有被任何容器使用且没有标签的镜像。

删除悬空镜像

悬空镜像指的是没有标签且未被任何容器使用的镜像。

可使用以下命令将其删除:

1
docker image prune -f

这里的 -f 选项是为了避免需要手动确认操作。

删除所有未被使用的镜像

若你想删除所有未被任何容器引用的镜像,不管它是否有标签,可使用以下命令:

1
docker image prune -a -f

其中,-a 选项意味着删除所有未被使用的镜像,而 -f 选项则用于避免手动确认。

删除所有的镜像

1
docker rmi `docker images -q`

强制删除

1
docker rmi --force `docker images -q`

删除所有没有tag的镜像

1
docker rmi `docker images|grep none|awk '{print $3 }'|xargs`