undefined

  1. 容器实际上是一个特殊的进程,主要利用了linux下的 namespace、cgroup机制
  2. namespace 机制是在创建(clone)一个进程的时候,指定参数
  3. 容器下的文件系统,使用chroot命令可以改变进程的根目录到指定位置
  4. 创建一个docker项目:1. 启用 linux namespace 配置;2. 设置指定的 Cgroups 参数; 3. 切换进程的根目录(Change Root);
  5. 同一台机器上所有容器,都共享宿主机操作系统的内核。挂载在容器根目录上,用来为容器进程提供隔离后执行环境的文件系统,就是“容器镜像”,也叫 rootfs(根文件系统)。rootfs 只是一个操作系统所包含的文件、配置和目录,并不包含内核。在Linux操作系统中,这两部分是分开存放的,操作系统只有在开机启动时才会加载指定版本的内核镜像
  6. rootfs 中打包的不只是应用,而是整个操作系统的文件和目录,也就是说,应用以及它运行所需要的所有依赖,都被封装在了一起
  7. 联合文件系统( Union File System ),最主要的功能是将多个不同位置的目录联合挂载( union mount ) 到同一个目录下,并且合并相同的文件。
  8. 容器镜像也叫做 rootfs,它只是一个操作系统所有文件和目录,并不包含内核,最多也就几百兆。而相比之下,传统虚拟机的镜像大多是一个磁盘的快照,磁盘有多大,镜像就至少有多大。
  9. 容器的设计是分层,上面的读写层通常称为容器层,下面的只读层称为镜像层,所有的增删查改操作都只会作用在容器层,相同的文件上层会覆盖掉下层。于是镜像文件的修改,其实比如:修改一个文件的时候,首先会从上到下查找有没有这个文件,找到,就复制到容器层,修改的结果就会作用到下层的文件,这种方式也被称为 copy-on-write