IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker原理及架构理解 -> 正文阅读

[系统运维]Docker原理及架构理解

Docker是什么?

  • docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
  • docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的linux服务器,也可以实现虚拟化。
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低。

简单来说,通过docker,我们可以在不同的硬件设备上使用同样的软件环境和配置。在实际的开发场景中,开发人员、测试人员往往不共用一套环境,这导致产品开发完成在转测后出现各种环境不适配、缺少依赖的问题,给测试人员带来了巨大的工作量。而通过docker,开发人员只要定义一个docker镜像,测试人员拉取该镜像并在其中进行相应产品的测试,就可以完全解决运行项目时的环境适配难题。

如下图,开发人员从功能模块中拉取主线代码创建自己的分支,并在个人分支上开发完成后合并回主分支,然后提交时候触发流水线。对于流水线中的三个任务分别启动不同的docker。

开发测试流水线示意图

补充概念

镜像 & 容器

镜像和容器的关系类似于面向对象编程中类和对象(实例)的关系。从镜像中其中一个容器,容器是镜像的运行实例。一个镜像可以启动多个容器。

容器 & 虚拟机

容器实质上是一个进程,它在linux本机上运行,并且容器之间共享主机内核。而虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。区别如图。容器共享相同的主机操作系统,虚拟机则有各自的操作系统。
容器与虚拟机

Docker架构

Docker的简易架构如下图所示。
docker架构

Docker Client

Docker是一个C/S架构程序,通过客户端Client发送请求至服务器或守护进程,而后服务器或守护进程将完成所有的工作后返回结果给客户端。Docker提供了一整套的Restful接口供客户端和服务端通信使用;此外,docker还提供了命令行工具。用户可以很方便的从本地docker客户端连接到远程docker服务器或远程服务器上运行着的docker守护进程。

Docker Daemon

Docker daemon是一个常驻在后台的系统进程,负责接收和响应客户端的请求。该守护进程在后台启动一个server,server负载接受docker client发送的请求;接受请求后,server通过路由与分发调度,找到相应的handler来执行请求。
docker daemon架构

Docker server

Docker server专门服务于client,接受并调度分发client的请求。

Engine

Engine是docker架构中的运行引擎,也是核心模块。Engine承担着docker容器存储仓库的责任,通过执行job的方式管理操作容器。

Job

Job是engine内部最基本的工作执行单元。Docker可以做的每一项工作,都可以抽象为一个job。例如:在容器内部运行一个进程,这是一个job;创建一个新的容器,这是一个job,从Internet上下载一个文档,这是一个job。

Job的设计者,把Job设计得与Unix进程相仿。比如说:Job有一个名称,有参数,有环境变量,有标准的输入输出,有错误处理,有返回状态等。

Docker Registry

Docker Registry是一个存储镜像的仓库。而镜像是在容器被创建时,被加载用来初始化容器的文件架构与目录。在docker的运行过程中,docker daemon会与docker registry通信,实现搜索、下载和上传镜像的功能。

Graph

Graph是docker已下载镜像的管理者,以及已下载镜像之间关系的记录者。一方面,Graph存储着本地具有版本信息的文件系统镜像,另一方面也通过GraphDB记录着所有文件系统镜像彼此之间的关系。

Driver

Driver是驱动模块,主要可以分为三类:graphdriver、networkdriver和execdriver。

  • Graphdriver用于完成镜像的管理,包括存储和获取。
  • Networkdriver用于完成docker容器网络环境的配置。
  • Execdriver则负责创建容器运行命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。

Libcontainer

libcontainer是Docker架构中一个使用Go语言设计实现的库,该库可以不依靠任何依赖,直接访问内核中与容器相关的API。Docker可以直接调用libcontainer实现对容器namespace、cgroups、apparmor、网络设备以及防火墙规则等的操纵。另外,libcontainer提供了一整套标准的接口来满足上层对容器管理的需求。或者说,libcontainer屏蔽了Docker上层对容器的直接管理。

Docker Container

Docker容器是docker架构服务最终交付的形式。用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统; 用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源; 用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境; 用户通过指定运行的命令,使得Docker容器执行指定的工作。

参考文章:https://www.cnblogs.com/zhangxingeng/p/11236968.html#auto_id_22

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:14:16  更:2021-07-23 11:16:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 2:04:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码