Docker架构

1、docker 框架

Docker采用的是C/S架构,客户端向服务端发送请求,服务器负责构建、运行和分发容器。这里最常用的Docker客户端就是docker命令。服务端即是Docker daemon,其运行在宿主机上,负责创建、运行、监控容器和构建存储镜像。我们经常改完Docker的配置之后,会执行systemctl daemon-reload,这就是重启服务的作用。

2、容器的底层技术

1> cgroup 实现资源限额

cgroup 即是control group。linux 通过cgroup 限制进程的资源,我们对容器CPU/IO/MEM限额实际就是在配置cgroup。

容器的资源配置都在/sys/fs/cgroup/路径下可以找到。如下图标注的即是对IOCPUMEM限额的配置

 

在cpu目录下包含docker独立的文件夹,进入docker文件夹就会有各个容器的ID

接下来进入某个容器,查看cpu配额,是默认值1024

2> namespace 实现资源隔离

linux使用namespace让每一个容器看起来像一个独立的计算机,也就是ns实现了容器间的资源隔离。

linux主要包含6种ns,分别是6种资源:Mount、UTS、IPC、PID、Network和User

1、Mount让容器自己觉得有整个文件系统。可以在容器内部mount、unmout

2、UTS让容器有自己的hostname。默认是短ID,或者通过-h设置的。

3、IPC 容器有自己的共享内存和信号量来实现进程间的通信。不会和host和其他容器混在一起

4、独立的PID

所有容器挂在docker进程下

ps axf 查看本机所有的进程

可以看到容器的进程和容器的子进程。

进入容器内部再查看进程ID和host的进程ID又有不同,容器有自己独立的PID,这就是ns提供的功能

5、Network

让容器有自己独立的网卡和IP等资源,这些在docker网络中介绍过

6、User

在容器可以创建新的用户,但是在宿主机是看不到该用户的。

二、docker 镜像

1、是什么

镜像实际是一个文件系统。可以看成是一个只读模板,通过镜像可以创建容器。

最大优点:共享资源。生成一个镜像都是基于一个基础镜像进行构建的,这个基础镜像可以被多个镜像使用。所以一个镜像是一层一层叠加而成的。

对于镜像层只是只读的,对于容器的改动(增、删、改)只会发生在容器层,所以只有容器层才是可写的。容器还有一个特性就是Copy-on-Write,就是在修改容器的时候会拷贝镜像层到容器层进行修改,所有的修改对于镜像层也是不感知的。这样大大增加了容器操作的效率,也维护了镜像层可以作为其他容器的base的特性

作者:tigergao
功不唐捐 玉汝于成
原文地址:https://www.cnblogs.com/tigergaonotes/p/14454533.html