容器与镜像

什么是容器?

容器是一个视图隔离资源可限制独立文件系统的进程集合。

视图隔离

所谓“视图隔离”就是能够看到部分进程以及具有独立的主机名等;因为进程之间相互可见并且可以相互通信,使用Namespace技术来实现进程在资源上的视图隔离。

资源可限制

控制资源使用率是可以对于内存大小以及CPU使用个数等进行限制;通过Cgroup来限制资源使用率,设置能够使用的CPU和内存量。

独立文件系统

针对不同进程使用同一个文件系统所造成的问题而言,Linux 和 Unix 操作系统可以通过 chroot 系统调用将子目录变成根目录,达到视图级别的隔离;进程在 chroot 的帮助下可以具有独立的文件系统,对于这样的文件系统进行增删改查不会影响到其他进程。

什么是镜像?

运行容器所需要的所有文件集合——容器镜像
Dockerfile - 描述镜像构建步骤

构建步骤所产生出文件系统的变化 - changeset
changeset的分层复用

changeset的分层和复用优势

1、提高分发效率
2、下载镜像时只需要下载本地没有的数据即可
3、节约系统资源

容器运行时的生命周期

单进程模型

1、Init进程生命周期 = 容器生命周期
2、运行期间可运行exec执行运维操作

数据持久化

1、独立于容器的生命周期
2、数据卷 - docker volume vs bind

容器项目架构

moby是目前最流行的容器管理引擎,moby daemon会对上提供关于容器、镜像、网络以及volume的管理。

moby 容器引擎架构

moby daemon锁依赖的最重要的组件是containerd,containerd 是一个容器运行时管理引擎,其独立于 moby daemon ,可以对上提供容器、镜像的相关管理。
containerd 底层有 containerd shim 模块,其类似于一个守护进程。

containerd
容器运行时

容器 VS VM

容器是