摘自

https://mp.weixin.qq.com/s/SsXIuDqeze_et8vWQ8fr3g

一、Docker Client

也称为Docker客户端。其实就是Docker提供命令行界面工具,是许多Docker用户与Docker进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。

二、Docker daemon

Docker daemon是服务器组建,以Linux后台服务的方式运行,是Docker最核心的后台进程,我们也把它称为守护进程。它负责响应来自Docker Client的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接受由Docker Client发送的请求,接受到的请求通过Docker daemon内部的一个路由分发调用,由具体的函数来执行请求。

我们大致可以将其分为以下三部分:

  • Docker Server
  • Engine
  • Job

Docker Daemon的架构

Docker Daemon可以认为是通过Docker Server模块接受Docker Client的请求,并在Engine中处理请求,创建出置顶的Job并运行。Docker Daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。

运行过程的作用有以下集中可能:

  • 向Docker Registry获取镜像
  • 通过graphdriver执行容器镜像的本地化操作
  • 通过networkdriver执行容器网络环境的配置
  • 通过execdriver执行容器内部运行的执行工作

由于Docker Daemon和Docker Client的启动都是通过可执行文件docker 来完成的,因此两者的启动流程非常相似。Docker可执行文件运行时,运行代码通过不同的命令行flag参数,区分两者,并最终运行两者各自相应的部分。

docker --daemon = true

docker –d

docker –d = true

再由docker的main()函数来解析以上命令的相应flag参数,并最终完成Docker Daemon的启动。下图可以很直观地看到Docker Daemon的启动流程:

默认配置下,Docker daemon只能响应来自本地Host的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开TCP监听。我们可以照着如下步骤进行配置。

  1. 编辑配置文件/etc/systemd/system/multi-user.target.wants/docker.service。在环境变量ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接。
  2. 重启docker daemon
  3. 通过以下命令即可实现与远程服务器通信。
    docker -H 服务器IP地址 info。

三、Docker Image

Docker image可以看作一个特殊的文件系统,除了提供运容器运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的参数(匿名卷,环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将Docker镜像看成只读模版,通过它可以创建Docker容器。我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被乘坐Dockerfile,通过执行docker build<docker-file>命令可以构建出Docker镜像

四、Docker Registry

Docker registry是存储docker image的仓库,它在docker生态环境中的位置如下图:

五、Docker Container

Docker 容器就是Docker镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方。Docker Container提供了系统硬件环境,我们可以使用Docker Images这些制作好的系统盘,再加上我们所编写好的项目代码,run一下就可以提供服务了。

最新文章

  1. PropertyGrid控件由浅入深(一):文章大纲
  2. zookeeper原理解析-序列化
  3. 2016-2-10 tomcat基础学习
  4. 团队开发——冲刺2.e
  5. sass安装 使用
  6. load and initialize
  7. swap chain- IDirect3DSwapChain9
  8. 单点登录系统(SSO)的开发思路
  9. 论 &lt;%@taglib prefix=&quot;s&quot; uri=&quot;/struts-tags&quot; %&gt; 的重要性
  10. 第三方浏览器内核嵌入一、Crosswalk
  11. keyboard添加down按钮
  12. Java的内存泄漏
  13. 不想当程序员的CEO不是好投资人:小米雷军23年前所写代码曝光
  14. Lvs+keepAlived实现负载均衡高可用集群(DR实现)
  15. 解决普通用户sudo时出现/usr/bin/sudo must be owned by uid 0 and have the setuid bit set
  16. 构建之法——Team &amp; Scrum &amp; MSF
  17. TCP选项之SO_RCVBUF和SO_SNDBUF
  18. python 字符串编码 str和unicode 区别以及相互转化 decode(&#39;utf-8&#39;) encode(&#39;utf-8&#39;)
  19. Tomcat启动时选择加载项目
  20. 5种漂亮的纯CSS3动画按钮特效

热门文章

  1. php记录
  2. 【洛谷P1483】序列变换
  3. 异步ztree 加复选框 及相应后台处理
  4. http uri唯一标识
  5. python学习笔记-列表和字典
  6. HDU3974 Assign the task
  7. mac host文件配置
  8. 关于shared_ptr与weak_ptr的使用(good)
  9. CEdit编辑框字体和背景设置
  10. 编写Excel文件的Golang库