摘自

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一下就可以提供服务了。

Docker(三)Docker是如何工作的的更多相关文章

  1. Docker(三)-Docker中Image、Container与Volume的迁移

    Image 镜像的迁移,适用于离线环境. 一般离线环境,都会自建Docker Registry. 无论 官方的 ,还是最近流行的 Harbor ,都是不错的选择. 但是,这个世界上就是有些环境,或者说 ...

  2. [转]Docker(三):Dockerfile 命令详解

    本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...

  3. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  4. AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排

    一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...

  5. Docker三

    将本地镜像发布到阿里云 有时候需要共享镜像或者习惯使用自己定义的镜像,可以注册私有仓库,国内推荐使用阿里云 步骤: 1.登录阿里云容器镜像服务:https://cr.console.aliyun.co ...

  6. 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理

    1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...

  7. docker(三) 镜像和容器常用命令

    一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 dock ...

  8. docker 4 docker的三要素

    docker三要素 镜像,容器,仓库 镜像 docker镜像(image)就是一个只读的模板,镜像可以用来创建docker容器,一个镜像可以创建很多个容器 容器 docker利用容器(containe ...

  9. CentOS环境Docker安装教程(官方推荐的docker三种方式安装)

    CentOS环境Docker安装教程(官方推荐的docker三种方式安装) 一.使用yum方式安装 1.安装依赖包 $ sudo yum install -y yum-utils device-map ...

  10. Docker 三种UI管理平台

    docker集中化web管理平台 一.shipyard 1.启动docker,下载镜像 # systemctl restart docker # docker pull alpine # docker ...

随机推荐

  1. 数组拆分I

    题目描述 给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最 ...

  2. apache ArrayUtils 工具类

    org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...

  3. CSS解决文字超出显示省略号问题

    超出一行 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 超出多行 overflow: hidden; text-ove ...

  4. 【codevs4927】线段树练习

    题目大意:维护一个序列,支持区间加.区间染色.区间最值查询.区间和查询. 题解:对于区间赋值操作来说,维护一个赋值标记,注意,这里不能直接用赋值的值直接维护,因为不像加法标记,0 表示不用处理,这里 ...

  5. (转)C++ 值传递、指针传递、引用传递详解

    一直以来对函数的值传递引用传递理解很模糊,这篇文章可以说是给自己扫盲了. 值传递:实参不会发生改变,是因为形参传递的是不是实参的源地址(形参和实参地址不一样).不影响实参 指针传递:本质也是值传递,只 ...

  6. 收藏:win32 控件之 sysLink控件(超链接)

    来源:https://blog.csdn.net/dai_jing/article/details/8683487 手动创建syslink(msdn): CreateWindowEx(, WC_LIN ...

  7. mfc01

    1.解决不能将参数1从“const char []”转换为“LPCTSTR” ,使用多字节字符集.

  8. SSH整合redis和MongoDB错误笔记

    由于毕设中做的是图片搜索网站,选择前端框用SSH,因为之间接触过SSH框架,略有了解,但没有深究,现在在整合redis和mongodb的过程中遇到很多错误,也是十分痛苦,只能通过百度和一步步尝试着解决 ...

  9. Python模块初识

    目录 一 模块初识 二 模块分类 三 导入模块 四 Python文件的两种用途 五 模板查找顺序 六 软件开发目录规范 一.模块初识 模块是自我包含并且有组织的代码片段,是一系列功能的集合体,一个py ...

  10. day-17(基础加强)

    回顾: listener(了解) 监听器,监听javaweb中三个域对象 监听对象的创建和销毁 ServletContextListener 在项目启动的时候加载配置文件 ServletRequest ...