Docker实战

只有理解隔离,才能知其然又知其所以然。

个人认为全书的精华就是容器的资源隔离与权限控制等基础原理的介绍,只有了解了这些概念,才能更好地构建与部署多容器应用栈。

文摘

隔离是众多计算模式、资源管理策略和一般审计实践的一个核心概念。容器提供的是进程上下文的隔离,而不是整个系统的虚拟化。

Docker构建的容器隔离包括8个方面:

  • PID命名空间——进程标识符和能力

  • UTS命名空间——主机名和域名

  • MNT命名空间——文件系统访问和结构

  • IPC命名空间——通过共享内存的进程间通信

  • NET命名空间——网络访问和结构

  • USR命名空间——用户名和标识

  • chroot()——控制文件系统根目录的位置

  • cgroups——资源保护

容器有四种状态:正在运行、暂停、重新启动或退出。

https://docs.docker.com/storage/images/types-of-mounts-volume.png

每一个存储卷就是容器目录树的挂载点在主机目录树中的位置,存储卷有两种类型:绑定挂载存储卷、管理存储卷。

/assets/bookshelf/Docker实战/network.jpg

有四种网络容器原型:Closed容器、Bridged容器、Joined容器、Open容器。Joined容器共享私有接口与本地回环接口。

链接的本质就是静态的、具有方向性和无传递性的依赖。链接通过检测目的容器的网络信息(IP地址和开放端口),然后将这些信息注入新容器中。容器只有在运行状态,才能维持IP地址的租约。

为新容器添加一条链接会发生以下三件事:

  • 描述目标容器的环境变量会被创建;

  • 链接的别名和对应的目标容器的IP地址会被添加到DNS覆盖列表中;

  • 如果跨容器通信被禁止了,Docker会添加特定的防火墙规则来允许被链接的容器间的通信。