容器与容器云

346 阅读2分钟

Docker Docker 的本质,是宿主机上的进程。 Docker 通过 namespace 实现资源隔离,通过 cgroups 实现资源限制,通过写时复制机制(copy-on-write)实现高效的文件操作。

想要实现一个资源隔离的容器,需要从哪些方面入手? 首先,是 chroot 命令,这条命令使根目录 / 的挂载点切换了,即文件系统被隔离了;接着,为了在分布式的环境下进行通信和定位,容器必要要有独立的 IP、端口、路由等,这就涉及到网络隔离;同时,容器还需要一个独立的主机名以便在网络中标识自己。有了网路,自然离不开通信,也就想到了进程间通信需要隔离;开发者可能已经想到了权限的问题,对用户和用户组的隔离就实现了用户权限的隔离;最后,运行在容器中的应用需要有进程号(PID),自然也需要与主机中的 PID 进行隔离。

Docker 背后的内核知识

  • namespace 资源隔离(一个容器所需要做的六项隔离)

    • UTS 实现主机名和域名隔离
    • IPC 实现进程间通信隔离
    • PID 实现进程号隔离
    • mount 实现文件隔离
    • network 实现网络隔离
    • user 实现用户与用户组隔离
  • cgroups 资源限制 cgroups 不仅可以限制被 namespace 隔离起来的资源,还可以为资源设置权重、计算使用量、操控任务(进程或线程)启停等。

Docker 网络管理 libnetwork 内置 5 种驱动可以提供不同类型的网络服务:

  • bridge 驱动
  • host 驱动
  • overlay 驱动
  • remote 驱动
  • null 驱动

bridge 驱动为 Docker 默认设置。使用该驱动时,libnetwork 将创建出来的 Docker 容器连接到 Docker 网桥上。

bridge 驱动实现机制分析:

  • docker0 网桥
  • iptables 规则
  • Docker 容器的 DNS 和主机名

Linux 网络虚拟化

  • 网络虚拟化的基石
  • veth pair
  • Linux bridge
  • tun/tap 设备
  • iptables

Docker 四大网络模式

  • bridge
  • host
  • container
  • none

Docker 网络技巧

Docker 容器组网的挑战

需要理解 Docker 单机容器网络

Docker 理解八篇文章

Docker四种网络模式

Linux 网络

VMWare 的三种网络模式

Linux 虚拟网络设备 veth-pair 详解,看这一篇就够了

Kubernetes