浅谈Docker基础与架构

容器技术

  • 享有虚拟机的好处,但抛弃了虚拟机的一些缺点,如:启动慢,占用内存大(一般为GB级别),这是因为虚拟机就是模拟一个操作系统,而操作系统本身是一个巨型的应用程序。
  • 应用部署时一个重要的点就是隔离性,使其在运行时互不干扰。虚拟机通过操作系统层面进行隔离,而容器技术只隔离应用程序的运行时环境而可以共享同一个操作系统。
  • docker就是容器技术的一种实现,它本身不是容器,而是创建容器的工具,是应用容器引擎。
特性虚拟机容器
隔离级别操作系统级进程级
隔离策略HypervisorCGroups
系统资源5~15%0~5%
启动时间分钟级秒级
镜像存储GB-TBKB-MB
集群规模上百上万
高可用策略备份,容灾,迁移弹性,负载,动态

Docker

  • 官方文档的两句话很好的总结了docker的特性:
    – Build, Ship And Run
    – Build Once, Run AnyWhere

    文档地址:docker官方文档

Docker引擎

  • Docker Engine是一个客户端-服务器应用程序,具有以下主要组件:
    长生命周期提供服务的守护进程
    REST API指定程序使用哪个接口与守护进程进行通信并指示其做什么
    命令行(CLI)客户端
    在这里插入图片描述
  • CLI使用Docker REST API通过脚本或直接的CLI命令来控制Docker守护进程或与之交互。

Docker架构

  • docker采用client-server架构。Docker客户端与Docker守护进程通信,守护进程承担构建,运行和分发Docker容器的繁重工作。Docker客户端和守护进程通过UNIX套接字或通过网络接口REST API进行通信。
    在这里插入图片描述
Docker守护进程(The Docker daemon)
  • docker守护进程监听docker api请求并且管理如镜像,容器等docker对象。一个docker守护进程也可与其他的守护进程通信以便管理docker服务。
Docker客户端(The Docker client)
  • docker客户端是用户唯一能与docker通信的方式,当你输入例如docker run命令时,客户端就会发送命令给docker守护进程。docker命令使用Docker API,一个docker客户端能与多个守护进程通信
Docker注册中心/docker仓库(The Docker registries)
  • docker仓库存储docker镜像。而Docker Hub就是一个公共的存放大仓库,docker的配置默认从Docker Hub中拉取镜像,也可自定义私人仓库。
Docker镜像(The Docker IMAGES)
  • 镜像是一个只读的模板,带有创建docker容器的指令。可以创建自己的images,也可以直接从docker仓库拉取镜像。要构建自己的镜像,你需要创建一个dockerfile,其中包含一个简单的语法,用于定义创建和运行镜像所需的步骤。Dockerfile中的每条指令都在镜像中创建一个层面(layer)。当你改变Dockerfile并重建镜像时,只有那些变动的层面才会被重建。与其他虚拟化技术相比,这也是docker镜像如此轻巧,快速的原因之一。
Docker容器(The Docker Contains)
  • 容器就是一个镜像的运行实例。你可以通过Docker API或者CLI创建,启动,停止或删除一个容器。默认情况下,容器与其他容器相隔离。你可以控制容器的网络,存储或其他底层子系统与其他容器或主机之间的隔离程度。

当运行docker run -i -t ubuntu /bin/bash命令时,docker的运作情况:

  1. 如果本地没有ubuntu镜像,Docker会从你配置的仓库拉取,就像你已经手动运行docker pull ubuntu命令。
  2. Docker创建一个新容器,就像你已经手动运行了docker container create命令。
  3. Docker分配一个读写文件系统给容器,作为它的最后一层面(layer),这允许运行中的容器在其本地文件系统中创建或修改文件和目录。
  4. 在没有指定任何网络选项的情况下,Docker创建一个网络接口来连接容器到默认网络。这包括为容器分配一个IP地址,默认情况下,容器可以使用主机的网络连接到外部网络。
  5. Docker启动容器并且执行==/bin/bash==。由于容器以交互方式允许并附加到终端(-i和-t),所以您可以在输出记录到终端的同时使用键盘提供输入。
  6. 当你键入exit去终止==/bin/bash==命令,容器停止运行,但不会被移除。

Docker底层技术

  • Docker由Go语言编写,它利用了Linux内核的一些特性来实现它的功能
命名空间
  • Docker使用一种称为命名空间的技术来提供称为容器的隔离工作空间。)当你运行一个容器时,Docker会为这个容器创建一组命名空间。每个容器的访问权限仅限于其所在命名空间,以下是官方文档中Docker引擎在Linux上使用的命名空间:
    在这里插入图片描述
  • 此技术利用了Linux内核中的Linux Namespace。Linux Namespace机制是一种轻量级的虚拟化形式,更加精细的资源分配管理机制,提供一种资源隔离方案,也即是用来隔离内核资源的方式
Control groups
  • cgroup 和 namespace 类似,也是将进程进行分组,但它的目的和 namespace 不一样,namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制。
  • 一个cgroup限制一个应用到一个特定的资源集。cgroup允许Docker引擎向容器共享可用的硬件资源,并可选择性的执行限制和约束。例如,你可以限制特定容器的可用内存。
Union file systems
  • Union文件系统(UnionFS)是一种通过创建层(layer)来运行的文件系统,使它们非常轻巧和快速。Docker引擎使用UnionFS来提供容器的构建块。Docker引擎可以使用多个UnionFS变体,包括AUFS、btrfs、vfs和DeviceMapper。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值