zoukankan      html  css  js  c++  java
  • Docker容器技术-基础与架构

    一、什么是容器

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

    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容器执行指定的任务。
  • 相关阅读:
    [NOIP2008] 提高组 洛谷P1125 笨小猴
    洛谷P3384 【模板】树链剖分
    Bzoj1503 [NOI2004]郁闷的出纳员
    POJ1422 Air Raid
    洛谷P1133 教主的花园
    洛谷P1186 玛丽卡
    HDU5115 Dire Wolf
    POJ1308 Is It A Tree?
    POJ2513 Colored Sticks
    Bzoj2326 [HNOI2011]数学作业
  • 原文地址:https://www.cnblogs.com/tongxiaoda/p/7680818.html
Copyright © 2011-2022 走看看