docker|docker 基础架构

前言 本文介绍docker的基础架构。
环境 【docker|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 基础架构
文章图片
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。
容器的生命周期 docker|docker 基础架构
文章图片
image.png 这张图已经十分详细,不再赘述。若看不懂,也仅仅是因为不熟悉docker的使用。
扩展 无。
参考 https://docs.docker.com/engine/docker-overview/#docker-architecture

    推荐阅读