一、什么是容器

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

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. OpenCV中Kinect的使用(3)

    接OpenCV中Kinect的使用(2),下面内容主要讲述使用OpenNI 控制Kinect 的马达,实现摄像头的上下摆动. 下面是透过OpenNI比较低阶的USB控制介面(XnUSB.h),来做到马 ...

  2. Sping 的 BeanFactory 容器

    Sping 的 BeanFactory 容器 这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.B ...

  3. Using Swift with Cocoa and Objective-C下载

    <Using Swift with Cocoa and Objective-C Building App > 下载地址 http://download.csdn.net/detail/sw ...

  4. js 触摸事件 touch

    //ban 为某div let startX = 0; ban.addEventListener("touchstart",function(){ //获取初始点击位置 start ...

  5. linux 文件文件夹操作

    文件夹下查询哪些文件含有abc内容: find .|xargs grep -ri "abc"

  6. 错误命令“if not exist "\Dll" mkdir "\Dll" xcopy "\bin\Debug\*.*" "F:\647\VS项目\EtrolMes2014SY\Framework\Dll" /e /i /y”已退出,代码为 9009

    分析错误 第一步:观察错误,发现plugin文件夹中未生成对应的编译文件. 第二步:XCOPY命令无法执行,百度xcopy为何无法执行 第三步,搜索,发现环境变量未配置正确. 就是环境变量path(大 ...

  7. splay tree旋转操作 hdu 1890

    很神奇的旋转操作. 目前没看到其他数据结构能实现这个功能.平衡树不好处理区间操作,线段树很难旋转.splay tree搞这个就很简单了. 下面用的这个模板跑了700ms,好慢,估计是删除操作太费时了, ...

  8. 【BZOJ1823】[JSOI2010]满汉全席 2-SAT

    [BZOJ1823][JSOI2010]满汉全席 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只 ...

  9. 数据类型比较:Long和BigDecimal

    1.基本类型: 基本类型可以用:">" "<" "==" 2.基本类型包装类:(对象类型) 2.1 Long 型: 要比较两个L ...

  10. 《挑战程序设计竞赛》2.1 穷竭搜索 POJ2718 POJ3187 POJ3050 AOJ0525

    POJ2718 Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6509   Acce ...