docker镜像之镜像提交

什么是镜像

理解

  1. 可以把镜像理解成一种软件(我们通过打包形成的一种可运行的交付环境)
  2. 也可以理解成一个类,而容器就是我们通过类 新建(new)出来的一个对象

分层的镜像

在这里插入图片描述
参考

Copy-On-Write 策略

  1. 读取的时候,大家共同读取一份文件
  2. 如果需要修改,就复制一份进行修改
    1. 但是大部分是不需要修改的
    2. 这就节省了很大的空间

分层的优点

参照Copy-On-Write 策略,docker将镜像文件分为多个独立的层,当新建新的镜像的时候,只需要引用基础的镜像文件就可以,这样就会节省大量的空间

  1. 通过图片我们可以看到最顶层是容器层,只有容器层是可写的,容器层所记录的是所有的更改,如图在这里插入图片描述
  2. 容器层往下的镜像层都是只读的,并不会被修改,当我们使用docker ps -s来查看的时候,结果如下,会有两列 size 和 virtual size
    1. size 表示读写层所占的大小
    2. virtual size表示读写层和只读层共同占的大小

最底层

在这里插入图片描述

我们可以看到docker的最底层是一个aufs

aufs

他是一种UnionFS(联合文件系统),他会将不同的目录挂载到同一个虚拟文件系统

  • docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
  • 其中bootfs(boot file system)主要包含bootloader和kernel
    • bootloader主要是引导加载kernel
    • Linux刚启动时会加载bootfs文件系统
    • 当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs
  • rootfs
    • 包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件
    • rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等

提交

提交之后会成为一个新的镜像,用新的镜像来新建容器,那么就会有新的镜像具有的功能

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
  • 要创建的目标镜像名必须都是小写的英文字母

例子

docker下载的ubuntu是没有vim的,我们下载vim后将镜像进行提交

  1. 下载Ubuntu
docker pull ubuntu
  1. 运行,并使用vim命令,我们会发现他是没有相关的命令的
    在这里插入图片描述
  2. 安装vim
apt-get update
apt-get install vim
  1. 提交镜像
    1. 注意这里容器id的查找是运行的容器在这里插入图片描述
    2. 退出ubuntu exit
    3. 提交
docker commit -m="add vim function" -a="csf" 5ee79702517 myubuntu

在这里插入图片描述
5. 查看镜像
在这里插入图片描述
我们可以看到增加vim的ubuntu的大小增加了不少
6. 运行myubuntu
在这里插入图片描述
我们就会发现我们可以编辑了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值