kubernetes基础之docker容器镜像转化、迁移的实现

容器镜像转化、迁移的实现

在很多的场景之下我们需要将容器与镜像之间进行相互的转化,比如说测试环境的迁移

第一、容器与镜像之间的相互转化

容器转化为镜像
[root@localhost ~]# docker rm $(docker ps -aq)    #删除之前的容器
8fda22d309a7
ddde61f54bfc
[root@localhost ~]# docker run -d --name=web1 nginx   #创建一个web1容器
a99cd7472522c44c4d1ebc77b55164b9cb126233c00718212c50b46a34e0f1f0
[root@localhost ~]# docker ps -a   #查看当前的容器
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
a99cd7472522   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 6 seconds   80/tcp    web1
[root@localhost ~]# docker export web1 > web1.tar    #利用export命令将容器归当成tar包
[root@localhost ~]# ls
nginx.tar  vol  web  web1.tar  web1.txt  web2.txt
[root@localhost ~]# docker images   #查看当前镜像
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    f6d0b4767a6c   7 weeks ago   133MB
[root@localhost ~]# docker import web1.tar nginx:v1   #利用insport命令,将tar包生成镜像。
sha256:b9ffb514da6132b9e0c65112148f73e8528182f7f24027bf27d481113857861e
[root@localhost ~]# docker images   #再次查看镜像,已经生成
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        v1        b9ffb514da61   5 seconds ago   131MB
nginx        latest    f6d0b4767a6c   7 weeks ago     133MB

镜像转为容器
[root@localhost ~]# docker images   #查看当前镜像
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        v1        b9ffb514da61   9 minutes ago   131MB
nginx        latest    f6d0b4767a6c   7 weeks ago     133MB
[root@localhost ~]# docker run -d --name=web2 nginx:v1   #用刚刚生成的镜像,创建一个容器,报错没有cmd
docker: Error response from daemon: No command specified.
See 'docker run --help'.

[root@localhost ~]# docker image inspect nginx:v1 | grep -i cmd   ##查看镜像的cmd详情,为null,生成容器的时候需要添加cmd
            "Cmd": null,
            "Cmd": null,

[root@localhost ~]# docker run -dt --name=web2 nginx:v1 /bin/bash   ##添加cmd后,再次尝试创建容器,成功
57d4bfecb625d20fedcb3bc94cc22b66f6a85544b105af0e0d7372ecb192e74a
[root@localhost ~]# docker ps -a   #查看容器
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS     NAMES
57d4bfecb625   nginx:v1   "/bin/bash"              4 seconds ago    Up 3 seconds              web2
a99cd7472522   nginx      "/docker-entrypoint.…"   15 minutes ago   Up 15 minutes   80/tcp    web1


第二、镜像的转移

[root@localhost ~]# docker save nginx:v1 > nginx_v1.tar   ##利用save命令,将镜像打成tar包
[root@localhost ~]# docker image rm nginx:v1   #删除掉这个镜像,验证一会生成,这个报错是说明还有容器在使用这个镜像
Error response from daemon: conflict: unable to remove repository reference "nginx:v1" (must force) - container 57d4bfecb625 is using its referenced image b9ffb514da61
[root@localhost ~]# docker stop web2 #停止容器
web2
[root@localhost ~]# docker rm web2   #删除容器
web2
[root@localhost ~]# docker image rm nginx:v1  #删除镜像
Untagged: nginx:v1
Deleted: sha256:b9ffb514da6132b9e0c65112148f73e8528182f7f24027bf27d481113857861e
Deleted: sha256:8f6cb55ae698dfc2dc74577775f1bcbed1d48f72213bb6097207631cce9db58a
[root@localhost ~]# docker images   #查看当前已经没有了nginx:v1镜像
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    f6d0b4767a6c   7 weeks ago   133MB
[root@localhost ~]# docker load < nginx_v1.tar   #利用load命令,将tar包导入成镜像
8f6cb55ae698: Loading layer [==================================================>]  135.4MB/135.4MB
Loaded image: nginx:v1
[root@localhost ~]# docker images  #镜像已经成功导入
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        v1        b9ffb514da61   16 minutes ago   131MB
nginx        latest    f6d0b4767a6c   7 weeks ago      133MB

[root@localhost ~]# docker run -dt --name=web2 nginx:v1 /bin/bash   #可以正常的创建容器
1107dc01eaa4480adb1332e1b152429fc53953e8a2705c290c79ce1b4d5a5ec3
[root@localhost ~]# docker ps -a   #查看容器
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS     NAMES
1107dc01eaa4   nginx:v1   "/bin/bash"              8 seconds ago    Up 7 seconds              web2
a99cd7472522   nginx      "/docker-entrypoint.…"   19 minutes ago   Up 19 minutes   80/tcp    web1
[root@localhost ~]# 

第三、注意

  • docker save 导出的镜像包 要比 docker export 打成的容器文件包大一点。这是因为docker export导出的容器包 丢失了历史和元数据metadata。可以这样理解,用save打成的tar是最全的
  • export与import搭档
  • save与load搭档
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘帅0952

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值