docker镜像迁移命令使用

起因

某台服务器无法连接外网,无法直接通过 docker-compose.yml 文件来镜像编排编译。所以使用其他服务器的镜像来直接使用。

操作

1、导出已有镜像

docker images #查看已有镜像
docker save <image-id> > name.tar #保存对应的镜像包

如下图

docker save

2、在目标鸡导入

将导出的 tar 包上传到目标机器执行导入,导入后 repository 和 tag 都为 none,使用 tag 命令做标记

docker load < name.tar #载入镜像包
docker tag <image-id> <repository>:<tag>

如下图

docker load
docker tag

3、启动新导入的容器

因为是使用容器编排,所以在不导致其他容器服务中断的情况下将 docker-compose.yml 中对应的 services 开启,使用 up 命令更新即可。

docker compose up -d

注:使用 docker compose down 先停止然后再启动也是一样的,但会导致其他容器服务中断

扩展知识

docker save 与 docker export 命令的区别 ?

  1. docker save 保存的是镜像(image),docker export 保存的是容器(container);
  2. docker save 保存的文件导入后会保留层(layer),docker export 保存的文件导入后没有层关系,即仅保存容器当时的快照状态;
  3. 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

Author: thinkwei

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注