docker学习系列17 镜像和容器的导入导出
先说总结:
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
比如我本机上有一个 finleyma/express的镜像,容器ID为4a655b443069
使用如下命令分别导出镜像和容器docker save -o express-save.tar finleyma/express
docker export -o express-export.tar 4a655b443069
发现如下特点:
- 镜像压缩包比容器要大。
- 目录结构不太一样
image.png
- export.tar 是很典型的Linux目录结构,还找到当初build时被ADD进的源码文件
image.png
- save.tar 其实就是分层的文件系统。Docker镜像就是由这样一层曾的文件叠加起来。
打开压缩包内的 repositories,
内容为{"finleyma/express":{"latest":"dda6ce6f2c43f673353e2ce232b31d11ff15b444e338a0ef8f34b6ef74093d6c"}}
既这个镜像的名称,tag是latest,id为dda6ce6f2c43f673353e2ce232b31d11ff15b444e338a0ef8f34b6ef74093d6c
而且tar内有相同ID的目录。
image.png
json文件的内容如下:里面记录着这一层容器文件的元信息,通过parent,还能知道依赖的上一层的文件系统是什么。
{
"id": "dda6ce6f2c43f673353e2ce232b31d11ff15b444e338a0ef8f34b6ef74093d6c",
"parent": "b75acde96878455ce36208008bb1143d4ea17723257c991f8bfb33ad9e27251d",
"created": "2018-09-19T15:41:54.6130547Z",
"container": "3cd78865317bce73179abc7d21fcbe860a96d14fc980c01566fa2c9412b17d7d",
"container_config": {
"Hostname": "3cd78865317b",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8081/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NODE_VERSION=8.9.4", "YARN_VERSION=1.3.2"],
"Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"npm\" \"start\"]"],
"ArgsEscaped": true,
"Image": "sha256:91f850e6adbd56df68088dffe63c56e6f48fc24f763ff9d22c739742be71212a",
"Volumes": null,
"WorkingDir": "/usr/src/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"docker_version": "18.06.1-ce",
"config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8081/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "NODE_VERSION=8.9.4", "YARN_VERSION=1.3.2"],
"Cmd": ["npm", "start"],
"ArgsEscaped": true,
"Image": "sha256:91f850e6adbd56df68088dffe63c56e6f48fc24f763ff9d22c739742be71212a",
"Volumes": null,
"WorkingDir": "/usr/src/app",
"Entrypoint": null,
"OnBuild": [],
"Labels": null
},
"architecture": "amd64",
"os": "linux"
}
打开lay.tar, 对于的原来就是当初dockerfile中的ADD . /app/
image.png
那 node_modules 跑哪了,你很快就能猜测到,肯定在上一层文件中。事实确实是这样的。ADD . /app/
之前对于的命令是 RUN npm install
image.png
所以写dockerfile时,一行命令对于一层文件系统,要充分利用这样机制,层的数量尽可能少,只安装必要的依赖包。
参考:
https://blog.csdn.net/liukuan73/article/details/78089138
https://yeasy.gitbooks.io/docker_practice/content/appendix/best_practices.html
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
使用Jenkins对接Github进行自动化CI
Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 Jenkins在 Docker hub 上有官方镜像和社区镜像, 根据官方描述,Jenkins的镜像已经由社区接管维护,镜像为jenkinsci/jenkins,所以这次的集成就用这个社区版的Jenkins。 Docker 信息 ~ docker version Client: Version: 18.03.1-ce API version: 1.37 Go version: go1.9.5 Git commit: 9ee9f40 Built: Thu Apr 26 07:20:16 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.1-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.5 Git co...
-
下一篇
阿里云服务器搭配宝塔面板进行几个优化设置来提升性能
使用阿里云服务器ECS的朋友很多,可是你知道阿里云服务器怎么样可以更好的提升性能和速度吗?今天我要给大家分享的就是如何通过宝塔面板的几个优化设置来提升阿里云服务器ECS性能,或者不能说提升,应该说更好的利用和发挥云服务器的性能。如果你还不知道什么是宝塔面板,可以看下本博前面的文章《[阿里云服务器设置教程:安装宝塔面板一步到位管理你的ECS]()》首先,你要有一个阿里云服务器,大家可以通过下面的代金券链接进入,领券购买只要293/年。 [阿里云代金券]( https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=0a5rig7f) 1、通过计划任务设置使宝塔面板每天自动释放内存。 建议成设置每天释放一次,执行时间为访问量比较少的夜间,如:3:30。 2、在宝塔面板的linux工具箱安装Swap虚拟内存: swap是Linux下的虚拟内存,设置适当的swap可增加服务器稳定性。建议swap容量在真实内存容量的1.5倍左右,若您的服务器内存大于4GB,可设1-2GB的固定值。 Swap推荐值设置:前面是物理内存,后面是虚...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- MySQL数据库在高并发下的优化方案