docker 镜像导入导出 删除 改名

镜像的导入与导出
假如有2台主机,我们在主机1上做了一个镜像,主机2想用这个镜像怎么办呢?

我们可以在主机1上push镜像到镜像仓库中,然后在主机2上pull把镜像拉下来使用,这种方式就显得比较麻烦,假如我只是测试用的,在一台主机上做好镜像后在另一台主机上跑一下就行了,没必要推到仓库上然后又把它拉到本地来。

此时我们可以在已有镜像的基础上把镜像打包成一个压缩文件,然后拷贝到另一台主机上将其导入,这就是镜像的导入和导出功能。

docker中我们使用docker save进行导出,使用docker load进行导入。

在已生成镜像的主机上执行docker save导出镜像

docker save -o myimages.gz seancheng1002/b1
1
在另一台没有镜像的主机上执行docker load导入镜像

docker load -i myimages.gz 

-----------------------------------------

docker镜像的导入导出

上不了网的机器用load 导入, import的不行

使用docker的save 和 load命令, 具体步骤如下

1.在A机器上列出所有的docker image,并找到你要保存的image名

sudo docker images

2.在A机器上使用docker save命令,保存image为tar文件

sudo docker save image_name -o file_path

其中,image_name替换为第一步里找到的要保存的image名。file_path是导出的tar文件路径,比如/home/tmp/image1.tar

3.将导出的image tar文件传到其他机器,如机器B。可以使用各种方式,比如scp之类的,在这里不详述了。

4.在需要使用image的机器上(如B机器)使用docker load命令加载image tar文件

sudo docker load -i file_path 

注:另外,也可以使用docker 的export和import命令实现类似功能,关于export/save, import/load的区别,可以自己上网查,在此不做展开了。

基本区别就是export出来的是容器(无历史和层信息),而save出来的是image(具有完整的历史和层信息,支持层回滚)

备份和还原 mysql 镜像
保存测试环境的 mysql 镜像

sudo docker save -o mysql.tar  hcr:5000/hschub/hscmysql:0.0.2
 
sudo chmod 777 mysql.tar
两台机器导入镜像

sudo docker load -i mysql.tar
启动容器,需要注意的是需要映射本地文件夹。

sudo docker run -p 3306:3306 --name mysql \
-v /home/hss/mysql/data:/var/lib/mysql \
-v /home/hss/mysql/etc/mysql:/etc/mysql \
-e MYSQL_ROOT_PASSWORD='123456' \
-d 46b
-v 代表映射的文件夹,-d 表示后台运行,46b 代表镜像 id。

进入容器,连接 mysql,node1的mysql 密码是 123456,node2 是 123456

# 查询容器 id
docker ps
 
# 进入 mysql 容器
docker exec -it <容器 id> /bin/bash
 
# 连接 mysql
mysql -u root -p
 
 

docker load -i pgadmin4.tar
8e012198eea1: Loading layer [==================================================>]  7.338MB/7.338MB
f98c0527e327: Loading layer [==================================================>]  246.6MB/246.6MB
86eea0a5249d: Loading layer [==================================================>]      9MB/9MB
38a4cec5c2fb: Loading layer [==================================================>]  375.8kB/375.8kB
771008107031: Loading layer [==================================================>]  3.072kB/3.072kB
ce61d78c812b: Loading layer [==================================================>]  2.048kB/2.048kB
3d7dba470ffe: Loading layer [==================================================>]  33.19MB/33.19MB
7f4a270deaa6: Loading layer [==================================================>]  26.26MB/26.26MB
f6cc226d24f0: Loading layer [==================================================>]   2.56kB/2.56kB
74aa2bfe4f34: Loading layer [==================================================>]   2.56kB/2.56kB
eadfe6735ba3: Loading layer [==================================================>]  6.144kB/6.144kB
e487c378f2ff: Loading layer [==================================================>]  3.584kB/3.584kB
9be4b6d7d44a: Loading layer [==================================================>]  91.14kB/91.14kB
794fb14c2793: Loading layer [==================================================>]  62.03MB/62.03MB
Loaded image: dpage/pgadmin4:latest

 

docker load <mysql8.tar.gz 
d0fe97fa8b8c: Loading layer [==================================================>]  72.49MB/72.49MB
329fe06a30f0: Loading layer [==================================================>]  338.4kB/338.4kB
ec8c80284c72: Loading layer [==================================================>]  9.539MB/9.539MB
9dae2565e824: Loading layer [==================================================>]    4.2MB/4.2MB
36b89ee4c647: Loading layer [==================================================>]  1.536kB/1.536kB
c21e35e55228: Loading layer [==================================================>]  53.76MB/53.76MB
15b463db445c: Loading layer [==================================================>]  6.656kB/6.656kB
93c2c03325c3: Loading layer [==================================================>]  3.584kB/3.584kB
fc43cbe9cad3: Loading layer [==================================================>]  409.1MB/409.1MB
ca0c4007532e: Loading layer [==================================================>]  5.632kB/5.632kB
14a85f5c8c8c: Loading layer [==================================================>]  16.38kB/16.38kB
7cbe40ac6a7b: Loading layer [==================================================>]  1.536kB/1.536kB
Loaded image ID: sha256:8e85dd5c32558ea5c22cc4786cff512c1940270a50e7dbc21ad2df42f0637de4
 

# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
<none>       <none>    8e85dd5c3255   2 years ago   544MB

docker-compose安装很简单 
1、安装
curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

2、把下载的文件授权
sudo chmod +x docker-compose

3、查看版本
docker-compose -version

4、建立需要使用的模板,默认是docker-compose.yml:
touch docker-compose.yml
启动方式
docker-compose up &
如果想要使用别的名字,启动的时候需要使用-f参数指定:
docker-compose -f mysql.yml up &

#  docker-compose up
Pulling mysql (rs.52qicloud.com/mysql/mysql:8.0.21)...
ERROR: Get "https://rs.52qicloud.com/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

# docker tag 8e85dd5c3255 rs.52qicloud.com/mysql/mysql:8.0.21
[root@cigflow-db-10-0-193-21 mysql]# docker images
REPOSITORY                     TAG       IMAGE ID       CREATED       SIZE
rs.52qicloud.com/mysql/mysql   8.0.21    8e85dd5c3255   2 years ago   544MB
[root@cigflow-db-10-0-193-21 mysql]#  docker-compose up

 docker images
 docker rmi  842e84275abd
 docker images 
 docker rmi  8e
 docker stop mysql
 docker rm 7d4475cc6e88 --容器
 docker rmi  8e

一、使用 export 和 import
1,查看本机的容器
这两个命令是通过容器来导入、导出镜像。首先我们使用 docker ps -a 命令查看本机所有的容器。

2,导出镜像
(1)使用 docker export 命令根据容器 ID 将镜像导出成一个文件。

docker export f299f501774c > hangger_server.tar
1
(2)上面命令执行后,可以看到文件已经保存到当前的 docker 终端目录下。

3,导入镜像
(1)使用 docker import 命令则可将这个镜像文件导入进来。
1

docker import - new_hangger_server < hangger_server.tar
1
(2)执行 docker images 命令可以看到镜像确实已经导入进来了。

二、使用 save 和 load
1,查看本机的容器
这两个命令是通过镜像来保存、加载镜像文件的。首先我们使用 docker images 命令查看本机所有的镜像。

2,保存镜像
(1)下面使用 docker save 命令根据 ID 将镜像保存成一个文件。

docker save 0fdf2b4c26d3 > hangge_server.tar
1
(2)我们还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:

docker save -o images.tar postgres:9.6 mongo:3.4
1
3,载入镜像
使用 docker load 命令则可将这个镜像文件载入进来。

docker load < hangge_server.tar
1
附:两种方案的差别
特别注意:两种方法不可混用。
如果使用 import 导入 save 产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。

1,文件大小不同

export 导出的镜像文件体积小于 save 保存的镜像
1
2,是否可以对镜像重命名

docker import 可以为镜像指定新名称
docker load 不能对载入的镜像重命名
1
2
3,是否可以同时将多个镜像打包到一个文件中

docker export 不支持
docker save 支持
1
2
4,是否包含镜像历史

export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。
1
2
5,应用场景不同

docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值