第7节 Docker镜像导出导入
镜像导出和导入-比如互联网下载后导入开发内网去-导出要用name:tag
docker save 默认是标准输出也就是屏幕打印了,所以需要-o write to a file ,instead of STDOUT
👆上图是屏幕拒绝了这个输出,其实还是有STDOUT动作,也就是说可以在上图的cli后使用重定向的。
因为save出来是tar包格式,所以要加上.tar
tar包只是打包的,没有压缩的这里,所以还需要压缩一下,减少磁盘空间占用
优化命令,就是导出来就是压缩的效果
1、首先使用重定向
2、然后
怎么直接打出来的,大小还少了11KB了👆,呵呵,应该数据没丢哦,哈哈哈;回头导入的时候看一下就知道了。
3、复制到其他docker机器上load
load的时候👆-i或<使用TDIN都行,不过此时load会导致dangling镜像的产生;而导致danling镜像也就是\
的原因是当初save导出镜像的时候用的是ID而不是名称+TAG,所以源头就错了
即使你想通过tag去补也是不行的,因为你压根就不知道这个ID是什么镜像inspect也看不到了
除非你run起来进去看看是个啥容器,再看看image的哈希值,然后去官网比对哈希值,然后打上对应的版本哈哈
搞错了,再来,导出的时候不带tag就是所有tag达成一个包,带tag就是那个tag的导出咯👇
把一个机器的所有镜像导出导入到别的机器
补充,你也可以指定下载哪个,而不是通过自动判断你是amd64的,
就是没有tag了,自己打咯用上面的docker tag 来打
所有镜像导出
1、也算是一条命令搞定吧
因为压缩要时间的,所以你自己选择具体cli👆
综上所述,推荐的cli是
sort卡住不动的CPU👇
一个sort 100% cpu 啊?不正常。正常,稍微分析下就知道答案了:
卡的原因也好理解--就是docker save xxx 其实就是images的导出内容了,是内容啊,所以很大,一直在sort排序,所以sort处理大量的数据了就,什么你表示怀疑,哦,那你用docker save xxx |cat 看看就知道啦
你说sort忙的过来不,这还是一部分,下面没完没了的乱码 二进制 格式👇
纠正截图👇
删除所有镜像
docker rm -f `docker images -aq`
,再导入就全部回来了👇
这样也行:
还有虽然是tar包,但是解开后是看不到images的,而是一层一层文件,还得是load才行
然后看看tar包里的这些文件吧
一个解包多出这么多,继续
发现👆layer.tar解开里面就是一个精简的 linux的 根目录 /
对比发现,少了boot这个么一个重要的文件,这很好理解,bootfs可不是在容器里,而在kernel里是宿主的内核,容器里只有rootfs层以及以上--这些是用户空间的东西。
然后继续看
这个精简镜像里的bin下的二进制都是busybox这个二进制的别名。
所以这些cat 、 df 、grep、mv、ls各种linux的命令都是busybox这个二进制模拟出来的,果真很busy啊~
尝试使用该牛逼的二进制,结果发现用不了👇
难道有库依赖,还真有👇
然后busybox容器里的分层文件里,果然有这依赖库的👇
只要把这个依赖复制到宿主的/lib下应该就可以了,因为要在宿主用,宿主找的这种so文件还是会从/lib下去找吧
将依赖复制到宿主的/lib/或/lib64/下,记得退出一下,否则还是识别不到
可见busybox --list 得到具体的指令
我用xargs 做了横向排列,看到了ping
于是busybox用ping
优秀👆
very good
👆上图可见busy的大小是极简的,不仅仅cli少,而且cli里的某个命令的功能也是少很多。但是也够用了👇
补充:打tag的
下载的时候也要指定使用哪里的镜像,否则就是从deamon.json配置的仓库下载,什么没有json文件,那就是默认的官网了。
上图👆是tag打了要上传到服务器的,所以要这么打,到时候,push的时候也就是推送到对应的服务器和目录的。
如果是本地用,就只写个镜像名和tag就行了
总结
1、docker安装,还是要先把仓库配置好的,具体操作很简单,就是
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
2、离线安装,见
离线安装也分官方脚本和非官方的,哈哈
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
3、小结下