docker 基础架构

2019-08-15  本文已影响0人  lzp1234

前言

本文介绍docker的基础架构。

环境

操作系统:centos7
docker版本:docker-ce: 18.09

正文

简介

docker是典型的 c/s 架构。

通过docker-ce安装的docker,会默认安装两个组件(通过 docker version 命令可以查看):

  1. docker client:这里安装的是cli,提供命令行功能。
  2. docker server:docker具体功能的实现者。也称之为 docker engine、docker daemon。

docker server 就如一个常见的web server,对外提供restful api。
docker client 可以有多种形式,比如sdk、cli。cli为用户提供命令行方式,sdk为程序提供包形式。

docker的架构里还包含一个组件:docker registry。用于存储容器的镜像。

docker基础架构
docker 实现原理

主要依赖:Namespaces、Control groups、UnionFS

Namespaces:

命名空间,主要起隔离作用。
其中包含:
pid namespace:进程隔离
net namespace:网络管理
ipc namespace:IPC(进程间通信)资源管理
mnt namespace:文件系统挂载管理
uts namespace:内核和版本标识符隔离。

Control groups:

控制组:限制容器对物理资源的使用,比如cpu、内存。
依赖技术:cgroups。

UnionFS:

联合文件系统:为容器提供块功能,也就是文件系统。
也可使用其它类似UnionFS的软件:例如 AUFS, btrfs, vfs, DeviceMapper

Container format

容器格式:这是一个逻辑概念。
表示,将 Namespaces、Control groups、UnionFS 组合起来形成的一种容器。目前的组合方式称之为 libcontainer,这也是当前唯一提供的方式。
引入该概念,因为以后可能会出现其它形式的容器。

docker 创建一个容器的主要步骤
  1. 拉取镜像
  2. 创建一个容器(此时只是创建,还未启动)
  3. 为容器分配文件系统
  4. 为容器创建网络
  5. 启动容器。

注意,当docker run 携带命令,则会覆盖掉镜像中的CMD。如下:

docker run -i -t ubuntu /bin/bash

此时无论ubuntu镜像的CMD是什么都不会执行,而会去执行 /bin/bash。

容器的生命周期
image.png

这张图已经十分详细,不再赘述。若看不懂,也仅仅是因为不熟悉docker的使用。

扩展

无。

参考

https://docs.docker.com/engine/docker-overview/#docker-architecture

上一篇下一篇

猜你喜欢

热点阅读