一、什么是容器

容器是对应用程序及其依赖关系的封装。

1.容器的优点

  • 容器与主机的操作系统共享资源,提高了效率,性能损耗低
  • 容器具有可移植性
  • 容器是轻量的,可同时运行数十个容器,模拟分布式系统
  • 不必花时间在配置和安装上,无需担心系统的改动,以及依赖关系是否满足

2.容器与虚拟机
运行在同一主机的3个虚拟机

运行在同一主机的3个容器

区别:
A.容器只能运行与主机一样的内核
B.程序库可以共用
C.容器中执行的进程与主机的进程等价(没有虚拟机管理程序的损耗)
D.隔离能力,虚拟机更高(将容器运行在虚拟机中)

3.容器与Docker
Docker利用现有的Linux容器技术,以不同方式将其封装及扩展(通过提供可移植的镜像及友好的接口),来创建及发布方案。

两部分:

  • 负责创建与运行容器的Docker引擎
  • 用来发布容器的云服务Docker Hub

二、Docker架构

1.总架构

主要模块:
DockerClient(与Daemon建立通信,发起容器的管理请求)
DockerDaemon(接收Client请求,处理请求)
Docker Regisrty(镜像管理)
Graph(存储镜像)
Drvier(镜像管理驱动)
libcontainer(系统内核特性,提供完整、明确的接口给Daemon)
Docker Container

2.各模块功能及实现
1)Docker Client
Docker架构中用户与Docker Daemon建立通信的客户端。
用户可以使用可执行文件docker作为Docker Client,发起Docker容器的管理请求。

三种方式建立通信:
tcp://host:port
unix://path_to_socket
fd://socketfd

Docker Client发送容器管理请求后,请求由Docker Daemon接收并处理,当Docker Client接收到返回的请求响应并做简单处理后,Docker Client一次完整的生命周期就结束了。

2)Docker Daemon
常驻在后台的系统进程。

主要作用:
接收并处理Docker Client发送的请求
管理所有的Docker容器

Docker Daemon运行时,会在后台启动一个Server,Server负责接收Docker Client发送的请求;接收请求后,Server通过路由与分发调度,找到相应的Handler来处理请求。

三部分组成:
A.Docker Server
专门服务于Docker Client,接收并调度分发Client请求。

Server通过包gorilla/mux创建mux。Router路由器,提供请求的路由功能,每一个路由项由HTTP请求方法(PUT、POST、GET、DELETE)、URL和Handler组成。

每一个Client请求,Server均会创建一个全新的goroutine来服务,在goroutine中,Server首先读取请求内容,然后做请求解析工作,接着匹配相应的路由项,随后调用相应的Handler来处理,最后Handler处理完请求后给Client回复响应。

B.Engine
核心模块,运行引擎。
存储着大量容器信息,管理着Docker大部分Job的执行。

handlers对象:
存储众多特定Job各自的处理方法handler。
例如:
{"create":daemon.ContainerCreate,}
当执行名为"create"的Job时,执行的是daemon.ContainerCreate这个handler。

C.Job
Engine内部最基本的执行单元,Daemon完成的每一项工作都体现为一个Job。

3)Docker Registry
存储容器镜像(Docker Image)的仓库。
Docker Image是容器创建时用来初始化容器rootfs的文件系统内容。

主要作用:

  • 搜索镜像
  • 下载镜像
  • 上传镜像

方式:

  • 公有Registry
  • 私有Registry

4)Graph
容器镜像的保管者。

5)Driver
驱动模块,通过Driver驱动,Docker实现对Docker容器运行环境的定制,定制的维度包括网络、存储、执行方式。

作用:
将与Docker容器有关的管理从Daemon的所有逻辑中区分开。

实现:
A.graphdriver
用于完成容器镜像管理。

初始化前的四种文件系统或类文件系统的驱动在Daemon中注册:
aufs、btrfs、devmapper用于容器镜像的管理
vfs用于容器volume的管理

B.networkdriver
完成Docker容器网络环境的配置。

C.execdriver
执行驱动,负责创建容器运行时的命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。
Daemon启动过程中加载ExecDriverflag参数在配置文件中默认设为native。

6)libcontainer
使用Go语言设计的库,不依靠任何依赖,直接访问内核中与容器相关的系统调用。

7)Docker Container
服务交付的最终体现。

用户对Docker容器的配置:

  • 通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统;
  • 通过指定物理资源的配额,使得Docker容器使用受限的资源;
  • 通过配置容器网络及其安全策略,使得Docker容器拥有独立且安全的网络环境;
    *通过指定容器的运行命令,使得Docker容器执行指定的任务。

Docker容器技术-基础与架构的更多相关文章

  1. docker容器技术基础入门

    目录 docker容器技术基础入门 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 docker ...

  2. docker容器技术基础之联合文件系统OverlayFS

    我们在上篇介绍了容器技术中资源隔离与限制docker容器技术基础之linux cgroup.namespace 这篇小作文我们要尝试学习容器的另外一个重要技术之联合文件系统之OverlayFS,在介绍 ...

  3. Docker容器技术基础

    Docker基础 目录 Docker基础 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 doc ...

  4. Docker容器技术-基础命令

    一.基础命令 1.运行一个镜像 [root@bogon ~]# docker run debian echo "Hello World" Unable to find image ...

  5. 1.docker容器技术基础入门

    内容来自:https://www.cnblogs.com/marility/p/10215062.html https://blog.51cto.com/gouyc/2310785?source=dr ...

  6. docker容器技术基础之linux cgroup、namespace

    一.开头 接触过docker的同学多多少少听过这样一句话"docker容器通过linux namespace.cgroup特性实现资源的隔离与限制".今天我们来尝试学习一下这两个东 ...

  7. 1、docker容器技术基础入门

    Docker和传统虚拟机的区别               参考文章: https://lwn.net/Articles/531114/    操作中的命名空间详解 https://blog.yadu ...

  8. 1.云原生之Docker容器技术基础知识介绍

    转载自:https://www.bilibili.com/read/cv15180540/?from=readlist

  9. 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...

随机推荐

  1. Linux shell (ssh批量配置免秘)读取配置文件,进行远程操作

    需要目标机器安装有 expect 命令 分成五个文件config.ini(配置文件).id_ras.pub(公钥).read.sh(一个函数,用于读取配置文件).test.sh(执行文件).run.s ...

  2. sqoop1.99.3配置过程

    感谢:http://www.myexception.cn/database/1600202.html 官网配置指导:http://sqoop.apache.org/docs/1.99.3/Instal ...

  3. 编译Hadoop1.1.2eclipse插件并测试

    (一).building hadoop 1.编辑{HADOOP_HOME}/build.xml (1).对31行的hadoop版本做修改 <property name="version ...

  4. 庖丁解牛:USB 驱动开发技术彻底解密

    我们知道如果开发工程师不懂RS232 肯定会让人笑话可以想象面向未来USB 接口无处不在因此掌握USB 的原理固件编程及其驱动开发技术势必成为当务之急USB 即插即用的优点和灵活性运用于各种电子产品现 ...

  5. 有关于iOS字体的设置

    1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的resouce中 3.在程序viewdidload中加载一下一段代码 NSArray *familyNames = [UI ...

  6. 在程序内部使用winGraphviz进行图形自动布局

    winGraphviz支持內部圖形形狀進行佈局圖輸出.當然,在我們程序內部並不需要這樣的一個圖,因為我們的圖可能需要其它的繪製元素,而且我們還會在圖形上進行拖動.放大.縮小等功能,一張簡單的佈局圖是不 ...

  7. JQuery处理DOM元素

    现有一个id为txtMyTest的元素 获取属性值 $('#id').attr('属性名'); 设置属性值 $('#id').attr('属性名','需要设置的值'); 设置多个属性 如下同时设置va ...

  8. CodedUI Test 测试WPF程序,无法获取控件属性值的解决方法

    注意注意!ItemStatus 在VS2010的CUIT里面是没有的!需要2013以上的版本才可使用. 公司新程序使用WPF制作,但使用CodedUI Test进行自动化测试的时候,很多控件抓取不到其 ...

  9. 数据链路层负载均衡 Linux Virtual Server

    w 李智慧

  10. junit5荟萃知识点(一):junit5的组成及安装

    1.什么是junit5? 和之前的junit版本不一样,junit5是由三个模块组成. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage ...