4. 本地镜像的导出和导入

如果远程镜像仓库无法用 docker pull 命令下载 Docker 镜像,我们可以直接从镜像仓库下载镜像包,然后导入到本地系统中。也可以将本地 Docker 内部的镜像导出成为 归档文件。

1. 导出镜像的命令 docker save

命令别名: docker image save

命令格式

导出成为 tar 包文件的命令:

docker save <镜像名:标签> 
# 或
docker save -o <文件名.tar> <镜像名:标签>

默认导出镜像为标准输出 STDOUT,然后可以通过管道交给 gzipxz等命令进行数据压缩。可以使用-o 现象直接导出为 .tar 归档文件。

如果不给出标签,默认导出标签为latest 的镜像。

docker save 命令的常用选项

选项
说明
-o <归档文件路径>
将文件导出到指定位置,代替标准输出 STDOUT

示例

weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker save -o ubuntu24.04.tar ubuntu:24.04  # 导出为 tar 包
weimingze@mzstudio:~$ sudo docker save ubuntu:24.04 | gzip > ubuntu24.04.tar.gz  # 导出为 tar.gz 压缩包
weimingze@mzstudio:~$ sudo docker save ubuntu:24.04 | xz > ubuntu24.04.tar.xz  # 导出为 tar.xz 压缩包
weimingze@mzstudio:~$ sudo docker save mysql | xz > mysql.tar.xz  # 导出 mysql:latest 为 .tar.xz 压缩包
weimingze@mzstudio:~$ ls
mysql.tar.xz  ubuntu24.04.tar  ubuntu24.04.tar.gz  ubuntu24.04.tar.xz

导出为 .xz 归档文件时间很长,压缩算法复杂导致。

2. 导入镜像的命令 docker load

命令别名: docker image load

命令格式

docker load < 归档文件路径
# 或 
docker load -i 归档文件路径

归档文件可以是 .tar.tar.gz.tar.xz 等格式的镜像包。

docker load 命令的常用选项

选项
说明
-i <归档文件路径>
从归档文件中读取数据,代替标准输入 STDIN

示例

weimingze@mzstudio:~$ ls
mysql.tar.xz  ubuntu24.04.tar  ubuntu24.04.tar.gz  ubuntu24.04.tar.xz
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
weimingze@mzstudio:~$ sudo docker load -i ubuntu24.04.tar.xz  # 使用.tar.gz镜像包导入镜像
3abdd8a5e7a8: Loading layer [==================================================>]  80.61MB/80.61MB
Loaded image: ubuntu:24.04
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker rmi ubuntu:24.04  # 删除镜像(后面会讲)
Untagged: ubuntu:24.04
Deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
Deleted: sha256:3abdd8a5e7a8909e1509f1d36dcc8b85a0f95c68a69e6d86c6e9e3c1059d44b3
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
weimingze@mzstudio:~$ sudo docker load < ubuntu24.04.tar  # 使用标准输入导入镜像
Loaded image: ubuntu:24.04
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker rmi ubuntu:24.04
Untagged: ubuntu:24.04
Deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
Deleted: sha256:3abdd8a5e7a8909e1509f1d36dcc8b85a0f95c68a69e6d86c6e9e3c1059d44b3
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
weimingze@mzstudio:~$ sudo docker load < ubuntu24.04.tar.xz
3abdd8a5e7a8: Loading layer [==================================================>]  80.61MB/80.61MB
Loaded image: ubuntu:24.04
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB