ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker:commit、export、import、save、load命令的使用

2021-09-22 18:05:09  阅读:211  来源: 互联网

标签:load mynginx nginx export 镜像 import docker save


export和import

export、import命令是一对,save、load命令是一对。

export:导出容器快照为镜像。

import:导入容器快照到本地镜像库

save:将指定镜像保存成tar文件。

load:导入使用docker save命令导出的镜像。

commit:将已存在容器中的镜像和修改内容提交为一个新的镜像,通过这个方式同样能保存读写层内容。

下面进行演示:

export和import:

命令格式:

docker export -o xxx.tar [容器ID|Name]

docker import xxx.tar newname:tag

先运行一个容器:

docker run --name mynginx -v /opt/html:/usr/share/nginx/html -p 80:80 -d nginx

执行:

docker export -o nginx.tar mynginx
docker import nginx.tar mynginx:v1
docker images

image-20210922165220616

先关闭原来的nginx容器,再去运行import生成的镜像:

docker stop mynginx
docker run --name mynginx.v1 -v /opt/html:/usr/share/nginx/html -p 80:80 -d mynginx:v1

这时候,我们发现docker run直接报错,说我们没有定义执行命令

image-20210922165507849

这时候,对于import生成的镜像,我们需要手动指定执行命令。

那么我怎么知道原镜像的执行命令呢?

两种办法:

  • 先执行docker inspect nginx,查看镜像的元信息,这里面定义了详细启动命令

    image-20210922170518471

    结合红框不难得出运行命令是:/docker-entrypoint.sh nginx -g 'daemon off;'

  • docker start mynginx
    docker ps --no-trunc
    

    image-20210922170743081

重新执行:

docker stop mynginx
docker run --name mynginx.v1 -v /opt/html:/usr/share/nginx/html -p 80:80 -d mynginx:v1 /docker-entrypoint.sh nginx -g 'daemon off;'

所以docker export和import比较坑,import生成的镜像不能直接run,需要知道之前容器的启动命令。

那出了不能直接run,还有其他区别吗?

使用docker inspect,查看原镜像:文件系统分了很多层。

image-20210922172358663

再看import生成的镜像:个镜像只剩了一层,其他的层级全没有了,整个镜像体积较之前也小了一些

image-20210922173210551

应用场景:
  主要用来制作基础镜像,比如从一个ubuntu镜像启动一个容器,然后安装一些软件和进行一些设置后,使用docker export保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。

save和load

save:将指定镜像保存成tar文件。

命令:docker save -o xxx.tar 镜像名

load:导入使用docker save命令导出的镜像。

命令:docker load -i xxx.tar

这两个命令比较简单,也没有什么坑,不着重介绍。

应用场景:

​ 用于镜像迁移到别处。

commit

将已存在容器中的镜像和修改内容提交为一个新的镜像,通过这个方式同样能保存读写层内容。

命令格式:

docker commit [容器名称|ID] 生成新的镜像名字

选项说明:

-a:提交的镜像作者

-c:使用dockerfile指令来创建镜像

-m:提交时的说明文字

-p:在commit的时候,将正在运行的容器暂停

测试:

docker run --name mynginx -v /opt/html:/usr/share/nginx/html -p 80:80 -d nginx
docker commit mynginx mynginx:v2
docker inspect mynginx:v2

image-20210922173925240

发现比原来的镜像多了一层。

应用场景:
 主要作用是将配置好的一些容器生成新的镜像,可以得到复用(再次使用不需要再配置)。

通过commit+save+load可以实现:我先在A机器上配置好了一个镜像,然后通过commit生成了镜像,使用save命令生成该镜像对应的tar包,然后移动到B机器上,然后在B机器上执行load命令,加载tar包到本地镜像仓库。当然你可以说那我有私人镜像仓库,就不用这么麻烦了,但是不是所有机器都在一个局域网内,那么这时候这几个命令就可以大展身手了。

参考:https://blog.csdn.net/qq_44895681/article/details/106100061

https://zhuanlan.zhihu.com/p/152219012

标签:load,mynginx,nginx,export,镜像,import,docker,save
来源: https://www.cnblogs.com/wwjj4811/p/15320991.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有