docker-学习笔记1-基础原理
namaspace
容器隔离环境,需要有一套虚拟的主机名、进程编号、网络地址、文件系统、用户系统等,这些是直接调用linux的命名空间实现的,而以下6个命名空间,是到内核3.8才全部实现。(centos7默认超过此内核版本,centos6-2.6-天然排除)
cgroups
资源分成一个个组,分给容器。但这些资源是共享一个系统内核的。只是把资源强行分割,所以边界就不如主机虚拟化那么清晰。
主机虚拟化,在创建虚拟机时,就限定了给定多少内存、cpu等资源,虚拟机无法使用超过分配到的资源。
容器虚拟化,docker 通过 cgroup 来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。
分层构建&联合挂载
一个nginx镜像,由centos底层和nginx层组成,这个centos层,也可以同时用于httpd等其他。这叫分层构建
在启动一个nginx容器时,会使用centos底层,启动httpd时,也是这个centos底层,这叫联合挂载
底层是只读的,在nginx层下面有一个容器层,如果在这个nginx修改底层文件,实际上是在这个容器层修改。
docker网络
docker装好后会有docker0设备出现。它是一个网桥,连接宿主机和容器。每创建一个容器,就会出现一对网卡,容器里有一个,宿主机上有一个,宿主机上被docker0关联起来。
一对网卡由docker0连接起来。所以容器可以和外网通信。
docker0的网段固定在172.17.0.0/16。所以在一个服务器下的容器都在一个网段里,可以彼此通信。
储存卷