本系列文章:docker
第一章:九析带你完爆 Docker 安装后端
第二章:九析带你完爆 Docker 架构服务器
目录架构
1 Docker 架构ide
2 Docker 组件工具
3 Docker 进程spa
3.1 客户端进程操作系统
3.2 服务端进程3d
3.3 registry 进程rest
1 Docker 架构图
我认为一个好的架构图要作好三件事,第一:要展现出全部重要组件;第二:要清晰定义这些组件的主次、层次、范围和通讯等关系。第三:要足够简单,可让人一目了然。我认为上面的架构图已经所有都作到了。
docker 由客户端(client)、服务端( Docker daemon,简称 dockerd )和注册服务器(Registry)三个组件组成,是典型的c/s架构。其中服务端组件的操做对象为:镜像(image)和容器(container)。docker 各个组件能够在同一台主机,也能够在不一样的主机。所以,Docker 已经不能再被简单当作工具,而应该被当作一个平台。
2 Docker 组件
docker 三大组件都各司其职,这里能够用一个生产加工型的企业作类比。
1) docker client: 管理部门。负责向 docker daemon 安排工做。
2)docker registry:仓储部门。负责存储生产原料(image)。
3)docker daemon:生产部门。和仓储部门沟通,获取生产原料;和管理部门沟通,接受任务,生产商品(container)。
3 Docker 进程
Docker 默认状况下不安装 registry。client 和 daemon 程序包路径以下:
1) client: /usr/bin/docker
2) daemon: /usr/bin/dockerd
3.1 客户端进程
客户端进程生命周期很短,从发送命令给 daemon,再到 daemon 响应返回、打印到控制台,每每几秒钟就结束了。下图是客户端进程的一个快照。
3.2 服务端进程
能够直接使用以下命令来启动服务端进程。
可是通常状况下,docker 安装程序会将服务端封装成一个操做系统后台服务,而后交给系统控制器 (systemctl) 来统一进行管理。这样作的好处是之后能够只经过名称(docker)而不是路径(/usr/bin/dockerd) 来管理后端服务了。
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker
sudo systemctl status docker
后台服务配置文件路径 /usr/lib/systemd/system/docker.service。截图以下:
从截图能够看出系统服务运行时会依赖哪些其余服务(Unit单元)、真正调用的后台程序是(/usr/bin/dockerd)、资源限制(Limit)、重启策略(Restart)等。
执行以下命令启动服务端进程。
sudo systemctl start docker
ps aux | grep dockerd | grep -v grep
3.3 registry 进程
这里首先要区分两个概念:registry 和 repo。repo 仅仅表示存储概念,而 registry 是 repo + 认证(鉴权、受权)。也就是说仓库并非谁访问均可以,它还须要有一个认证和准入的操做。
此外,registry 还有公共和私有之分。docker 默认使用的就是公共 registry(hub.docker.com)。所以你在本地是没法看到 registry 的进程。若是你想在本地也看到 registry 的进程,你须要下载 registry 镜像,并将镜像加载在容器中运行才行。
sudo mkdir /opt/data/registry -p
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry:2