docker原理 构造镜像

一、 使用busybox创建容器

1. 让容器跑 在有镜像的环境中
运行的容器其实就是一个进程,当使用namespcae隔离了网络、用户、PID等各种资源以后,站在主机的角度,容器的运行目录还是当前程序的运行目录,运行mount命令会发现可以看到继承自父进程的所有挂载点,下面通过联合挂载实现让容器跑在自己的目录中。

  1. pivot_root 是一个系统调用,主要功能是改变当前的root文件系统, 他可以把整个系统切换到一个新的root目录下,而移除对之前root文件系统的依赖

二、 使用AUFS包装busybox

  1. 首先创建busybox文件夹,作为容器只读层
  2. 创建writelayer文件夹 ,作为容器读写层
  3. 创建mnt文件夹, 作为挂载点 ,并把busybox目录、writelayer目录mount到mnt目录下。
  4. 删除容器时,首先umount mnt目录,
  5. 删除mnt目录
  6. 删除writelayer目录

这里写图片描述

三、挂载volume原理

  1. 首先创建busybox文件夹,作为容器只读层
  2. 创建writelayer文件夹 ,作为容器读写层
  3. 创建mnt文件夹, 作为挂载点 ,并把busybox目录、writelayer目录mount到mnt目录下。
  4. 判断volume参数是否为空,如该为空,结束创建过程,如该不为空,解析volume字段,解析正确后,挂载数据卷。

    挂载数据卷的过程 :
    1、首先读取宿主机文件目录url,创建宿主机目录
    2、读取容器挂载目录,在容器文件系统中创建挂载点,/root/mnt/rul
    3、把宿主机目录挂载到容器挂载点。

删除容器过程:
1、当volume字段不为空时,首先卸载掉volume挂载点的文件系统:/root/mnt/url
2、卸载掉整个容器的文件系统挂载点 /root/mnt
3、删除容器文件系统挂载点
4、删除writelayer目录

这里写图片描述

四、镜像打包

commit命令,实现运行态的容器打包成镜像

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值