Docker中的镜像分层技术详解

摘要:
Dockerfile:我们如果想去定制这些镜像,我们可以去编写Dockerfile,然后重新bulid,最后把它打包成一个镜像,这种方式是最为推荐的方式包括我们以后去企业当中去实践应用的时候也是推荐这种方式。镜像的概念主要就是把把运行环境和业务代码进行镜像的打包,我们这个课重点是了解镜像的分层技术,我们先来看一个Ubuntu系统的镜像。

早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物,在集装箱出现以后,码头上看到更多的不是工人,而且集装箱的搬运模式更加单一,更加高效,还有其他的好处,比如:货物多打包在集装箱里面,可以防止货物之前相互影响。并且到了另外一个码头需要转运的话,有了在集装箱以后,直接把它运送到另一个容器内即可,完全可以保证里面的货物是整体的搬迁,并且不会损坏货物本身。那么docker 镜像在IT行业中也扮演着非常重要的形象。

什么是docker 镜像

就是把业务代码,可运行环境进行整体的打包

如何创建docker镜像:

现在docker官方共有仓库里面有大量的镜像,所以最基础的镜像,我们可以在共有仓库直接拉取,因为这些镜像都是原厂维护,可以得到即使的更新和修护。

Dockerfile

我们如果想去定制这些镜像,我们可以去编写Dockerfile,然后重新bulid,最后把它打包成一个镜像,这种方式是最为推荐的方式包括我们以后去企业当中去实践应用的时候也是推荐这种方式。

Docker中的镜像分层技术详解第1张

Commit :

当然还有另外一种方式,就是通过镜像启动一个容器,然后进行操作,最终通过commit这个命令commit一个镜像,但是不推荐这种方式,虽然说通过commit这个命令像是操作虚拟机的模式,但是容器毕竟是容器,它不是虚拟机,所以大家还是要去适应用Dockerfile去定制这些镜像这种习惯。

镜像的概念主要就是把把运行环境和业务代码进行镜像的打包,我们这个课重点是了解镜像的分层技术,我们先来看一个Ubuntu系统的镜像。

Docker中的镜像分层技术详解第2张

我们可以镜像可以分层很多个layer,并且他们都有大小和ID,我们可以看到这里有4layer ID号,最终这个镜像是由他们layer组合而成,并且这个镜像它是只读的,它不能往里面写数据,如果想写数据怎么办呢?我们会在镜像上启一层contain layer,其实就是相当于把镜像启动成一个容器,那么在容器这一层,我们是可写的。

Docker中的镜像分层技术详解第3张

比如我们想在这个Ubuntu这个系统上加一层,只能在上面继续叠加,这些工作其实都是由cow,写字库下的机制来实现的。

子镜像

Docker中的镜像分层技术详解第4张

下载的时候只会下载子镜像最上面的一层,因为其它层已经有了,那么它可以做到一个节约空间的作用。

父镜像

Docker中的镜像分层技术详解第5张

最为典型的就是镜像的分层技术——aufs

Docker中的镜像分层技术详解第6张

AufsAnother Union File System的缩写,支持将多个目录挂载到同一个虚拟目录下。

已构建的镜像会设置成只读模式,read-write写操作是在read-only上的一种增量操作,固不影响read-only层。

这个研究有一个好处,比如我们现在可以看到手机里面的APP,在命令里面都会用APP字段下回来,在下回来之前它就是一个静态的,我们没有往里面写东西,但是我们启动起来以后,我们就可以往里面写东西,进行各种各样的操作。但是如果我们把它关掉了以后,或者删除了以后,它的这个镜像是存在远端的,所以在这个镜像里面是不会去修改的。并且这样也会有一个非常好的地方,这个场景非常适合我们去实现测试环境,因为我们的测试环境经常会有一个操作就是灌数据,我们可以提前把这个镜像数据打包到测试里面,那么这个镜像软件里面包含了,最上面是nginx,比如它里面会有一些数据,我们可以在往上面打一层数据,打完之后把它起成一个容器就可以去测试,测试完之后这个容器里面会生成各种各样的数据,也就是脏数据,这样的话,我们就可以把这个容器删掉,删掉以后我们镜像里面的容器是不会受影响的。如果说它想再创建一套,我们可以把这个镜像再启一个容器,就可以是一个一模一样的,并且是一个干净的环境。

原文链接:http://www.maiziedu.com/wiki/cloud/dockerimage/

免责声明:文章转载自《Docker中的镜像分层技术详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Activity启动模式 及 Intent Flags 与 栈 的关联分析用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenStack虚拟机创建过程中镜像格式的的变化过程

Glance用来作为独立的大规模镜像查找服务,当它与Nova和Swift配合使用时,就为OpenStack提供了虚拟机镜像的查找服务,像所有的OpenStack项目一样,遵循以下设计思想: 基于组件的架构 - 便于快速增加新特性 高可用性 - 支持大负荷 容错性 - 独立的进程地址空间,避免串行错误 开放标准 - 对社区驱动的API提供参考实现 1....

Docker安装各种服务

一. centos7设置固定IP 查看当前正在使用的网络情况 [root@localhost ~]# nmcli dev status 显示情况 : DEVICE TYPE     STATE   CONNECTION ens33   ethernet 连接的   ens33      lo     loopback 未托管   --  ...

Docker中运行redis报错误: Failed opening the RDB file root (in server root dir /etc/cron.d) for saving: Permission denied

错误信息: 1:M 23 Dec 2021 19:53:02.058 * Background saving started by pid 1848 1848:C 23 Dec 2021 19:53:02.058 # Failed opening the RDB file backup.db (in server root dir /etc) for sa...

老司机使用 docker-pan 一键搭建可离线磁力种子的私有云盘,可在线播放预览文件

更新:更好的网盘https://hub.docker.com/_/nextcloud/ 迁移文件后重新扫描目录命令: docker exec --user www-data 7aacb245c5c7 php occ files:scan --all 如果安装遇到问题: 跑了一下,发现问题是 mysql 的 datadir 没有权限导致的,进入 docker...

Docker容器和K8s添加Health Check

docker容器启动后,怎么确认容器运行正常,怎么确认可以对外提供服务了,这就需要health check功能了。 之前对health check的功能不在意,因为只要镜像跑起来了就是健康的,如果有问题就会运行失败。在连续两次收到两个启动失败的issue之后,我决定修正一下。 遇到的问题是,一个web服务依赖mongo容器启动,通过docker-compo...

为什么安装了淘宝镜像,永用cnpm安装依赖包会报错,而用npm就不会?报错:cnpm : 无法加载文件 C:Users93457AppDataRoaming pmcnpm.ps1。。。。

cnpm - 解决 " cnpm : 无法加载文件 C:Users93457AppDataRoaming pmcnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息 。。。 "问题描述:明明全局安装了淘宝镜像,却不能用cnpm安装依赖包,一用就报错:如下: 解决方案如下: 1.在win10 系统中搜索框 输入 Windos PowerShell选择...