起因
某台服务器无法连接外网,无法直接通过 docker-compose.yml
文件来镜像编排编译。所以使用其他服务器的镜像来直接使用。
操作
1、导出已有镜像
docker images #查看已有镜像
docker save <image-id> > name.tar #保存对应的镜像包
如下图

2、在目标鸡导入
将导出的 tar 包上传到目标机器执行导入,导入后 repository 和 tag 都为 none,使用 tag 命令做标记
docker load < name.tar #载入镜像包
docker tag <image-id> <repository>:<tag>
如下图


3、启动新导入的容器
因为是使用容器编排,所以在不导致其他容器服务中断的情况下将 docker-compose.yml
中对应的 services
开启,使用 up 命令更新即可。
docker compose up -d
注:使用 docker compose down
先停止然后再启动也是一样的,但会导致其他容器服务中断
扩展知识
docker save 与 docker export 命令的区别 ?
docker save
保存的是镜像(image),docker export
保存的是容器(container);docker save
保存的文件导入后会保留层(layer),docker export
保存的文件导入后没有层关系,即仅保存容器当时的快照状态;docker load
用来载入镜像包,docker import
用来载入容器包,但两者都会恢复为镜像;
类比电脑,可以简单理解 save 就是相当于保存的是装机光盘 iso,export 保存的是当前系统文件备份。
应用场景不同
- docker export :主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用
docker export
保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。 - docker save :如果我们的应用是使用
docker-compose.yml
编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用docker save
将用到的镜像打个包,然后拷贝到客户服务器上使用docker load
载入。
参考来源:
https://www.hangge.com/blog/cache/detail_2411.html
https://www.cnblogs.com/williamwucoder/p/13682347.html