深入剖析kubernetes系列学习之容器镜像(三)

本博客为个人学习极客时间中张磊课程时所作的笔记,仅作交流,不得作为商用

上一篇深入剖析kubernetes系列学习之何为容器(二)

目录

容器的脚下是什么

更改根目录的chroot

容器镜像rootfs

容器镜像的层(layer)

联合文件系统

aufs

只读层/镜像层

可读写层/容器层

init层

Overlay

只读层/镜像层

init层

可读写层/容器层

Overlay2

overlay2中镜像和容器的磁盘结构

Devicemapper

在Docker中配置存储驱动


容器的脚下是什么

Namespace的“隔离”让容器进程看到伪装过的世界,而Cgroups则给这个世界打造了一堵无形的墙——emm,怎么有点楚门的世界既视感,哈哈哈,如果容器进程(楚门)低头看看自己的脚下(文件系统),他会看到什么景象呢?之前提到Namespace的时候有介绍六种技术,其中有个mount:

Mount

CLONE_NEWNS

挂载点(文件系统)

Mount Namespace修改的是容器进程对文件系统“挂载点”的认知。Mount Namespace跟其他Namespace的使用略有不同的地方在于它对容器进程视图的修改一定是伴随着挂载操作才能生效,C语言中有专门的mount函数执行挂载命令:

#include <sys/mount.h>

int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);
参数:   
source:将要挂上的文件系统,通常是一个设备名。
target:文件系统所要挂在的目标目录。
filesystemtype:文件系统的类型,可以是"ext2","msdos","proc","nfs","iso9660" 。。。
mountflags:指定文件系统的读写访问标志

更改根目录的chroot

我们都希望在容器进程启动后看到整个根目录“/”,而chroot命令就是shell中专门完成该功能的,它能够改变进程的根目录到你指定的位置,用法简单:

# chroot $HOME/test /bin/bash

以上命令告诉操作系统使用$HOME/test目录为/bin/bash进程的根目录。实际上,Mount Namespace正是基于对chroot的不断改良才被发明出来的,他也是Linux操作系统里面的第一个Namespace。

可以认为,Docker容器启动后主要执行了三个操作:

启用 Linux Namespace 配置;

设置指定的 Cgroups 参数;

切换进程的根目录(Change Root)

关于第三个操作,Docker容器会优先调用pivot_root进行切换,系统不允许时才会使用chroot。其区别主要为:

pivot_root和chroot的主要区别是,pivot_root主要是把整个系统切换到一个新的root目录,而移除对之前root文件系统的依赖,这样你就能够umount原先的root文件系统。而chroot是针对某个进程,而系统的其它部分依旧运行于老的root目录。

在Linux中,这种挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统即“容器镜像”,更专业的名字叫rootfs(根文件系统)。

容器镜像rootfs

rootfs只是一个操作系统所包含的文件、配置和目录,并不包括操作系统内核,所以说,rootfs只包括了操作系统的躯壳,没有包括操作系统的灵魂——哈哈哈哈!容器共享的还是宿主机的操作系统内核。

rootfs最重要的作用,是为容器提供了一致性的特性。

很多应用打包发布的时候,程序员只看到其编程语言层面的依赖,导致在新的环境打开应用时面临各种异常。殊不知,整个操作系统的文件和目录本身才是应用最需要的、最完整的依赖,而rootfs就提供了这种深入到操作系统级别的运行环境一致性,优雅的解决了应用的环境依赖问题。

容器镜像的层(layer)

我们知道一个项目的代码经常使用git等代码仓库进行管理,每一次修改和commit都会在仓库中生成一个镜像记录。

容器镜像借鉴了git的思想,用户制作镜像的每一个操作都会生成一个层,也就是一个增量rootfs。而实现这一想法的技术是联合文件系统UnionFS。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes指南-倪朋飞.pptx 1-唐继元Kubernetes Master High Availability 高级实践.pdf 2、刘淼-基于 DevOps、微服务及k8s的高可用架构探索与实现.pdf ArchSummit北京2016-《网易蜂巢基于万节点Kubernets支撑大规模云应用实践》-刘超.pdf Azure Service Broker_cn - Rita Zhang.pdf google/ HPE李志霄 Kubernetes企业级容器云:加速数字创新-20170407.pdf IBM马达:Kubernetes 中基于策略的资源分配.pdf k8s资料.rar Kubernetes Cookbook-Packt Publishing(2016).pdf Kubernetes Microservices with Docker-Apress2016.pdf Kubernetes on Azure - Gabe Monroy.pdf Kubernetes1.6集群部署完全指南——二进制文件部署开启TLS基于CentOS7.pdf Kubernetes1-4版本新增加功能介绍.pdf Kubernetes监控与日志.pdf kubernetes容器云平台实践-李志伟v1.0.pdf Kubernetes生态系统现状报告.pdf Kubernetes下API网关的微服务实践 长虹集团-李玮演讲PPT.pdf Kubernetes与EcOS的碰撞结合 成都精灵云-张行才演讲PPT.pdf Kubernetes与OpenStack融合支撑企业级微服务架构.pdf Kubernetes在华为全球IT系统中的实践.pdf Kubernetes在企业中的场景运用及管理实践.pdf Kubernetes指南-倪朋飞.pdf Kubernetes指南-倪朋飞.pptx l.txt Lessons+learned+and+challenges+faced+while+running+Kubernetes+at+scale.pdf rkt与Kubernetes的深度融合.pdf rkt与Kubernetes的深度融合.pptx SACC2017FabricOnKubernetesChinese.pdf ThoughtWorks林帆-白话Kubernetes网络.pdf 百度云PaddlePaddle on kubernetes-周倜.pdf 从Borg到Kubernetes-PaaS产品设计-华为-钟成.pdf 改造Kuberntetes打造SAE容器云.pdf 跟谁学-基于容器的持续集成平台建设.pdf 谷歌深度学习Kubernetes上的实践.pptx 惠普基于Kubernetes容器私有云平台实践.pdf 基于Kubernetes的模板化应用编排.pdf 基于kubernetes容器云平台设计与实践-邓德源.pdf 基于Kubernetes的私有容器云建设实践-易宝支付.pdf 基于Kubernetes构建AI业务生态.pdf 李波:小米生态云应用引擎实践.pdf 魅族容器云平台基于 k8s 的自动化运维实践-曾彬.pdf 欧昌华-基于 Nginx 的负载均衡器在 K8S 中的实践.pdf 彭超:瓜子云的落地.pdf 如何落地TensorFlow on Kubernetes.pdf 如何用OpenStack和Kubernetes快速搭建一个容器和虚拟机组合服务的云平台.pptx 孙杰:大型企业云平台架构演进的实践之路.pdf 微服务道与术-敖小剑.pdf 微软Azure云助力微服务-赵文婧.pdf 颜卫-腾讯云容器服务基于kubernetes的应用编排实践-final-v1.0.pptx 有容云邓绍军-Kubernetes落地实践.pptx 折800如何用Docker&Kubernetes;构建自动化测环境.pdf

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值