Docker体系结构

Docker体系结构

Docker使用C/S 架构,docker daemon 作为 server 端接受 client 的请求,并处理(创建、运行、分发容器),他们可以运行在一个机器上,也通过socket或者RESTful API 通信
Docker daemon 一般在宿主主机后台运行。
Docker client以系统命令的形式存在,用户用docker命令来跟docker daemon 交互。

1. Docker 内部:

# 要理解 Docker 内部构建,需要理解以下三大核心概念:
1.Docker 镜像 - Docker images
2.Docker 仓库 - Docker repository [rɪˈpɑːzətɔːri] 
3.Docker 容器 - Docker containers [kənˈteɪnərz]
只有理解了这三个核心概念,才能顺利地理解Docker容器的整个生命周期。

2. Docker 底层技术

docker底层的2个核心技术分别是 Namespaces [neɪm ˈspeɪsɪz] 和Control groups

**Namespaces用来隔离各个容器**

```shell
1.pid namespace

	不同用户的进程就是通过pid namespace隔离开的,且不同namespace中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace 。

2.net namespace
	有了pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过net namespace实现的,每个net namespace有独立的network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个container的网络就能隔离开来。docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge: docker0 连接在一起。

3.ipc namespace
	container中进程交互还是采用linux常见的进程间交互方法 (interprocess communication-IPC),包括常见的信号量、消息队列和共享内存。container的进程间交互实际上还是host 上具有相同pid namespace中的进程间交互。

4.mnt namespace
	类似chroot,将一个进程放到一个特定的目录执行。mnt namespace 允许不同namespace的进程看到的文件结构不同,这样每个namespace中的进程所看到的文件目录就被隔离开了。在container里头,看到的文件系统,就是一个完整的linux系统,有/etc、/lib 等,通过chroot实现。

5.uts namespace
	UTS("UNIX Time-sharing System") namespace 允许每个container拥有独立的hostname和domain name, 使其在网络上可以被视作一个独立的节点而非Host上的一个进程。

6.user namespace
	每个container可以有不同的user和group id,也就是说可以在container内部用container内部的用户执行程序而非Host上的用户。
	有了以上6种namespace从进程、网络、IPC、文件系统、UTS和用户角度的隔离,一个container就可以对外展现出一个独立计算机的能力,并且不同container从OS层面实现了隔离。然而不同namespace之间资源还是相互竞争的,仍然需要类似ulimit来管理每个container所能使用的资源--cgroup。
```

**cgroups(Control groups)实现了对资源的配额和度量。**

```shell
# Cgroups提供了以下四大功能:

1.资源限制(Resource Limitation):cgroups可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出OOM(Out of Memory)。

2.优先级分配(Prioritization):通过分配的CPU时间片数量及硬盘IO带宽大小,实际上就相当于控制了进程运行的优先级。

3.资源统计(Accounting): cgroups可以统计系统的资源使用量,如CPU使用时长、内存用量等等,这个功能非常适用于计费。

4.进程控制(Control):cgroups可以对进程组执行挂起、恢复等操作。
```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值