前言
有时因为网络原因或者是暂时无法重启Docker没法使镜像生效,我们可以把镜像本地构建后导出再导入。
Docker信息
查看docker版本
1 | docker version |
显示docker系统的信息
1 | docker info |
镜像导出导入
在 Docker 中,你可以使用 docker save 和 docker load 命令来导出(export)和导入(import)镜像。
注意:这里说的是 镜像(image) 的保存/加载,不是容器(container)的导出(docker export 是针对容器的,会丢失历史层和元数据)。
导出镜像为 tar
1 | # 拉取镜像(如果尚未存在) |
生成的
node-18-bullseye-slim.tar包含完整的镜像层、元数据、标签等。
导入镜像
将 node-18-bullseye-slim.tar 复制到目标机器(如用 scp、U盘、网络传输等),然后执行:
1 | # 导入镜像 |
导入后,运行:
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。
注意事项
- 镜像 ID 会变吗?
不会。只要内容一致,镜像 ID 相同。但如果你重新打标签(tag),会有新标签指向同一 ID。 - 能否跨平台使用?
可以,但必须确保目标机器架构兼容(如都是linux/amd64)。node:18-bullseye-slim默认是 amd64,ARM 机器需拉取对应版本。 - 国内网络问题?
如果你是在无外网的内网环境,这种方式非常适合离线部署基础镜像。
容器导入导出
导出 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` |