1 Docker架构概述
- Docker提供了一个开发、打包、运行app的平台
- 把app和底层infrastructure隔离开来
Docker Engine
- 后台进程
- REST API Server
- CLI 接口
Docker架构
底层技术支持
Namespace:做隔离 pid、net、ipc、mnt、uts
Control groups:做资源限制
Union file systems:Container 和 image 的分层
2 Docker Image概述
- 文件和meta data的集合( root filesystem )
- 分层的,并且每一层都可添加改变
- 删除文件,成为一个新的image
- 不同image可共享相同的layer
- image 本身是 read-only
- dockerimage结构
从基本的看起,一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成,
bootfs(boot file system) 主要包含 bootloader 和 kernel,bootloader 主要用于引导加载 kernel,当 kernel 被加载到内存中后 bootfs 会被 umount 掉
rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc 等标准目录和文件
docker image 中最基础的两层结构
不同的 linux 发行版(如 ubuntu 和 CentOS ) 在 rootfs 这一层会有所区别,体现发行版本的差异性。
传统的 Linux 加载 bootfs 时会先将 rootfs 设为 read-only,然后在系统自检之后将 rootfs 从 read-only 改为 read-write,然后就可在 rootfs 上进行读写操作了
但 Docker 在 bootfs 自检完毕之后并不会把 rootfs 的 read-only 改为 read-write,而是利用 union mount(UnionFS 的一种挂载机制)将 image 中的其他的 layer 加载到之前的 read-only 的 rootfs 层之上,每一层 layer 都是 rootfs 的结构,并且是read-only 的。所以,我们是无法修改一个已有镜像里面的 layer 的!只有当我们创建一个容器,也就是将 Docker 镜像进行实例化,系统会分配一层空的 read-write 的 rootfs ,用于保存我们做的修改。一层 layer 所保存的修改是增量式的,就像 git 一样。