01 docker容器技术基础入门

  本章内容:

    1、container是什么?

    2、LXC技术介绍

    3、namespaces-名称空间,实现资源隔离

    4、容器的资源分配--Cgroup,实现资源分配

    5、LXC与dockers

-------------------------------------------------------------------

  基于虚拟化基础知识,我们这一节开始介绍docker技术的相关内容:docker技术可以理解为我们所学习的虚拟化基础知识的一个延申;

1、container是什么?

容器是一种基础工具;泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、存储、运输物品;物体可以被放置在容器中,而容器则可以保护内容物;

人类使用容器的历史至少有十万年,甚至可能有数百万年的历史

容器类型:

  瓶、罐、箱、篮、桶、袋、瓮、碗、柜、鞘

2、LXC技术介绍

  在了解LXC之前,我们先回顾下主机虚拟化技术:主机虚拟化分为两类:

    type-I、type-II(有VMM管理平台) 

  不管是哪一类,我们都需要通过虚拟技术实现一个系统平台,目的就是为了在这个系统平台上去运行对应的应用进程(例如httpd),来提供服务;

  所以,为了运行一个应用进程,我们不得不在其下面去跑一个内核系统,来支持这个进程的正常运行,如果我们可以跳过这个运行的内核,从而直接去运行一个虚拟机的应用进程,这样岂不是更加节约资源。所以,这样,就出现了我们的容器技术--LXC(LinuX container);

  LXC技术的目的:抽调虚拟的内核层;直接去虚拟进程,提供系统硬件设备的资源利用率!

  这样的话,就带来对应的问题:如果你想运行两个同样的服务,这样,如何在LXC环境下区分这两个一样的进程呢?如下图:

 

3、namespaces-名称空间,实现资源隔离

  我们知道,Linux的底层内核依靠的是C语言进行开发的,而C语言中有个函数模块namespace就是专门用来进行资源隔离--从内核处开始,进行资源隔离;也可以说是,避免资源冲突;

  它是Linux kernel内核默认的功能之一;

  隔离的资源如下:

    1、独立的主机名和域名--UTS

    2、需要有自己的独立的挂载数--Mount

    3、IPC隔离,实现进行间通讯--信号、消息队列和共享存储的隔离

    4、所有的进程都属于init进程--每个独立空间的init进程要独立隔离

    5、为每一个空间微赚一个root用户,对于自己空间而言,是root用户,而对于其他空间而言是普通用户;

    6、虚拟自己的专用网卡,或者tcp/ip协议栈,网络隔离;

  容器技术需要满足以上隔离条件,才能真正实现;所以,namespaces技术是容器技术的基础,如下图:

  【内核开始默认支持6种namespaces的最早的内核版本】

  此时,我们就可以基于内核抽调资源,同时使用namespaces技术进行资源隔离,而这种技术,我们就叫做容器技术

  容器技术为了调用这些namespaces资源,namespaces提供了相应的API接口,例如:

    clone()  创建新进程。根据系统调用参数来判断哪种类型的namespace被创建,而且它们的子进程也会被包含到namespace中

    unshare()  将进程移出某个namespace

    setns()  将进程加入到namesp中

4、容器的资源分配--Cgroup,实现资源分配

  有了资源隔离,我们就要实现资源分配;内核提供资源分配技术--Control Groups(Cgroups技术)

    Cgroups实现资源分配包括:

      blkiq:块设备IO

      CPU:CPU

      cpuacct:CPU资源使用报告

      cpuset:多处理器平台上的CPU集合

      devices:设备访问

      freezer:挂起或恢复任务

      memory:内存用量及报告

      perf_event:对cgroup中的任务进行统一性能测试

      net_cls:CGroup中的任务创建的数据报文的类标识符

    Cgroup对应的功能参数:

  针对于不同的组,我们使用CGroup技术进行不同的资源分配;(不是大锅饭,而是精细的进行资源分配,满足每个容器的资源利用)

  

5、LXC与dockers

  最早的容器技术来自于BSD的jail技术,目的就是为了实现进程隔离,使得一个进程被攻陷后不会影响到其他进程,这是出于安全的目录;

  而Linux将该技术移植到自己的系统之上,叫做vserver(功能类似于chroot),创建一个自己的更目录,区分与当前的目录系统;

  我们知道,为了使用Linux的内核资源,namespaces提供了相应的API接口(clone(),unshare(),setns(),);这样就是我们的容器技术;

  真正的容器技术--LXCdocker等,则是为namespaces、cgroup封装了一个更好管理的接口;

  LXC

    这个技术就是最早的容器技术;它方便了容器的管理,例如:

    lxc-create 可以用来创建虚拟的用户空间;  template  可以用来创建模板【模板可以选择应用创建在那些不同的发型版系统上】

    然后,我们需要找到一个目录空间,将这个目录制定为该用户空间的根目录,应用则运行在这个所谓的“根目录”下,这就是所谓的容器技术;

    lxc技术对于容器技术的发张功不可没,但是它有着与生俱来的缺点--无法实现大规模部署;

    于是,出现了docker技术;

  docker

    为了解决lxc对于批量化管理容器的缺陷,我们对lxc进行二次封装,这样得到的管理工具就是我们的docker了;

    docker的工作原理:

      docker环境下,我们将一个系统所需要的所有的文件集中打包,这就是一个镜像文件,我们将这个镜像放在仓库中,而这个镜像文件可以不是系统,而且可以是具体的服务文件,比如NGINX服务文件;

      然后将这个镜像文件从“仓库”中下载到本地,运行run命令,这样就可以启动这个仓库(类似于运行了一个命令);

      系统在基于一些列的机制对docker启动的容器进行资源份分配;这种环境下,我们运行的docker进程就是一个进程;且多个容器就是多个隔离进程,相互之间不会影响;

  如上图:各种进程的运行,运行在自己的独立的容器之中,容器之间相互独立,相互隔离!这样大大加强了进程之间的安全性,且docker下进程所需要的资源,都由docker环境来提供;

  批量创建容器:分层构建、灵活挂载的方式来创建容器;

    例如,底层提供一个centos,上层运行进程即可。多个进程可以共享一个centos底层即可;然后将服务挂在到两个目录下,就是两个容器!且,挂在的文件是只读文件;然后再在本地目录添加一层,去满足该容器需要修改文件的需求;

    这样迁移又会有困难;所以在真正使用的时候,真正数据并不保存于本地,而是存放于后面的共享存储中;

    如下图:

    另外一个问题则是,如果关联进程启动顺序如何确定?

    例如:nmp NGINX MySQL PHP进程运行顺序如何来决定启动?这就涉及到容器的编排问题;常见的解决方案如下:

      machine + swarm + compose 来进行系统编排;

      mesos + marathon 方案;

      kubernetes --> k8s;

    以上工具都是用来进行容器进程编排的工具;

  容器技术的缺点:

    1、不管怎么说,系统启动容器,比直接启动进程是消耗了更多的资源空间;

    2、调试工具;本身一个系统下运行多个进程,这些进程使用一套调试工具即可。但是现在进程之间相互隔离,则每个容器都需要提供一套调试工具;

    3、调试进程得进入到容器中进行调试,相对于原本只需要在系统下调试,相对而言更加困难!

总结:

  容器给运维带来了极大的不便,但是给开发带来了极大的便利,它真正让代码实现了一次编写多环境运行,它极大的节约了软件开发的成本;

  这也是当今社会容器技术如此火的原因;

 

原文地址:https://www.cnblogs.com/BurnovBlog/p/11141129.html

时间: 2024-10-29 04:50:04

01 docker容器技术基础入门的相关文章

当公有云Azure拥抱Docker容器技术

本文转载至 http://3387405.blog.51cto.com/3377405/1598977 预见未来看似是一件不太可能的事情,然而现在企业科技高速发展的态势完全超乎想象. 就在几周前InfoWorld的主编Eric Knorr在引流潮流专栏发表一篇非常火爆的关于2015年以及之后的九大科技企业趋势,在其中非常清晰的指出这九大潮流中头两位就是公有云的胜利和容器技术的狂热.从这里我们很容易理解为什么最近Scott Guthrie 发表并且Jason Zander 再次阐述与Docker合

Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)

service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一:打包在容器里. 显然不行.除非数据不会发生变化,否则,如何在多个副本直接保持同步呢? 选项二:数据放在 Docker 主机的本地目录中,通过 volume 映射到容器里. 位于同一个主机的副本倒是能够共享这个 volume,但不同主机中的副本如何同步呢? 选项三:利用 Docker 的 volum

5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)

据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数量的容器和工作负载.在积累了这么多年的经验后,Google 决定重写这个容器管理系统,并将其贡献到开源社区,让全世界都能受益. 这个项目就是 Kubernetes.简单的讲,Kubernetes 是 Google Omega 的开源版本. 从 2014 年第一个版本发布以来,Kubernetes 迅

开发自己的 chart - 每天5分钟玩转 Docker 容器技术(167)

Kubernetes 给我们提供了大量官方 chart,不过要部署微服务应用,还是需要开发自己的 chart,下面就来实践这个主题. 创建 chart 执行 helm create mychart 的命令创建 chart mychart: Helm 会帮我们创建目录 mychart,并生成了各类 chart 文件.这样我们就可以在此基础上开发自己的 chart 了. 新建的 chart 默认包含一个 nginx 应用示例,values.yaml 内容如下: 开发时建议大家参考官方 chart 中

Kubernetes 集群日志管理 - 每天5分钟玩转 Docker 容器技术(180)

Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志管理.这是一个 Elasticsearch.Fluentd 和 Kibana 的组合.Elasticsearch 是一个搜索引擎,负责存储日志并提供查询接口:Fluentd 负责从 Kubernetes 搜集日志并发送给 Elasticsearch:Kibana 提供了一个 Web GUI,用户可以浏览和搜索存储在 Elasticsearch 中的日志. 部署 Elasticsearch 附加组件本身会作为 K

Docker容器技术介绍

本章节阅读 索引 一,容器的概念 二,LXC技术介绍 三,Docker技术介绍 四,Dcoker的基本配置与安装 一,容器的概念 什么是容器?在google中是这样定义的 容器是一种基础工具:泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于 容纳.储存.运输物品:物体可以被放置在容器中,而容器则可以保护内容物: 人类使用容器的历史至少有十万年,甚至可能有数百万年的历史: 而在计算机领域: 容器(container)是指是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜

云计算学习路线图课件:学Docker容器怎样快速入门?

"云计算"作为未来网络甚至未来计算机行业的发展趋势,得到了广泛重视.越来越多的人想通过学习云计算收获高薪,学习云计算的过程中会接触到Docker容器,这究竟是为什么?如何快速高效的学好Docker容器.进而学好云计算呢? docker就像一个集装箱一样,里面放着自己所需要的应用程序.docker内部使用的是Linux容器技术,并且提供一个完整的文件系统,独立的网络环境. docker 和vm虚拟机的主要区别在于,vm虚拟机启动之前需要制定好资源,例如CPU,内存,硬盘等,这会占用了一些

如何安装和配置 Rex-Ray?- 每天5分钟玩转 Docker 容器技术(74)

Rex-Ray 是一个优秀的 Docker volume driver,本节将演示其安装和配置方法. Rex-Ray 以 standalone 进程的方式运行在 Docker 主机上,安装方法很简单,在需要使用 Rex-Ray driver 的主机 docker1 和 docker2 上运行如下命令: curl -sSL https://dl.bintray.com/emccode/rexray/install | sh - 然后创建并编辑 Rex-Ray 的配置文件 /etc/rexray/c

新书发布《每天5分钟玩转Docker容器技术》

后台不时收到关于纸质版教程书籍的询问,今天终于可以给大家一个交代了. <每天5分钟玩转Docker容器技术>现已在各大书城上架. 比较了一下,目前京东上最实惠:https://item.jd.com/16936307278.html 下面回答几个大家可能关心的问题. 1. 这本书包含哪些内容? 按照年初的计划,整个教程会涵盖容器生态系统中最重要的容器技术和平台技术. 由于版面篇幅的限制,这次出版的<每天5分钟玩转Docker容器技术>内容就是容器技术部分,具体内容如下: 平台技术部