docker的模块转发
⼀、简介
1、了解Docker的前⽣LXC
LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,⽽且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤⽴的组中,以更好地在孤⽴的组之间平衡有冲突的资源使⽤需求。
与传统虚拟化技术相⽐,它的优势在于:
(1)与宿主机使⽤同⼀个内核,性能损耗⼩;
(2)不需要指令级模拟;
(3)不需要即时(Just-in-time)编译;
(4)容器可以在CPU核⼼的本地运⾏指令,不需要任何专门的解释机制;
(5)避免了准虚拟化和系统调⽤替换中的复杂性;
(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
总结:Linux Container是⼀种轻量级的虚拟化的⼿段。
Linux Container提供了在单⼀可控主机节点上⽀持多个相互隔离的server container同时执⾏的机制。Linux Container有点像chroot,提供了⼀个拥有⾃⼰进程和⽹络空间的虚拟环境,但⼜有别于虚拟机,因为lxc是⼀种操作系统层次上的资源的虚拟化。
2、LXC与docker什么关系?
docker并不是LXC替代品,docker底层使⽤了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。
在LXC的基础之上,docker提供了⼀系列更强⼤的功能。
3、什么是docker
docker是⼀个开源的应⽤容器引擎,基于go语⾔开发并遵循了apache2.0协议开源。
docker可以让开发者打包他们的应⽤以及依赖包到⼀个轻量级、可移植的容器中,然后发布到任何流⾏
的linux服务器,也可以实现虚拟化。容器是完全使⽤沙箱机制,相互之间不会有任何接⼝(类iphone的app),并且容器开销极其低。
4、docker官⽅⽂档
5、为什么docker越来越受欢迎
官⽅话语:
容器化越来越受欢迎,因为容器是:
灵活:即使是最复杂的应⽤也可以集装箱化。
轻量级:容器利⽤并共享主机内核。
可互换:您可以即时部署更新和升级。
便携式:您可以在本地构建,部署到云,并在任何地⽅运⾏。
可扩展:您可以增加并⾃动分发容器副本。
可堆叠:您可以垂直和即时堆叠服务。
镜像和容器(contalners)
通过镜像启动⼀个容器,⼀个镜像是⼀个可执⾏的包,其中包括运⾏应⽤程序所需要的所有内容包含代码,运⾏时间,库、环境变量、和配置⽂件。
容器是镜像的运⾏实例,当被运⾏时有镜像状态和⽤户进程,可以使⽤docker ps 查看。
容器和虚拟机
容器时在linux上本机运⾏,并与其他容器共享主机的内核,它运⾏的⼀个独⽴的进程,不占⽤其他任何可执⾏⽂件的内存,⾮常轻量。
虚拟机运⾏的是⼀个完成的操作系统,通过虚拟机管理程序对主机资源进⾏虚拟访问,相⽐之下需要的资源更多。
6、docker版本
Docker Community Edition(CE)社区版
Enterprise Edition(EE) 商业版
7、docker和openstack的⼏项对⽐
640?wx_fmt=png
8、容器在内核中⽀持2种重要技术
docker本质就是宿主机的⼀个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了⾼效的⽂件操作(类似虚拟机的磁盘⽐如分配500g并不是实际占⽤物理磁盘500g)
1)namespaces 名称空间
640?wx_fmt=png
2)control Group 控制组
cgroup的特点是:     
cgroup的api以⼀个伪⽂件系统的实现⽅式,⽤户的程序可以通过⽂件系统实现cgroup的组件管理
cgroup的组件管理操作单元可以细粒度到线程级别,另外⽤户可以创建和销毁cgroup,从⽽实现资源载
分配和再利⽤
所有资源管理的功能都以⼦系统的⽅式实现,接⼝统⼀⼦任务创建之初与其⽗任务处于同⼀个cgroup的控制组
四⼤功能:
资源限制:可以对任务使⽤的资源总额进⾏限制
优先级分配:通过分配的cpu时间⽚数量以及磁盘IO带宽⼤⼩,实际上相当于控制了任务运⾏优先级
资源统计:可以统计系统的资源使⽤量,如cpu时长,内存⽤量等
任务控制:cgroup可以对任务执⾏挂起、恢复等操作
9、了解docker三个重要概念
1)image镜像
docker镜像就是⼀个只读模板,⽐如,⼀个镜像可以包含⼀个完整的centos,⾥⾯仅安装apache或⽤户的其他应⽤,镜像可以⽤来创建docker容器,另外docker提供了⼀个很简单的机制来创建镜像或者更新
现有的镜像,⽤户甚⾄可以直接从其他⼈那⾥下周⼀个已经做好的镜像来直接使⽤
2)container容器
docker利⽤容器来运⾏应⽤,容器是从镜像创建的运⾏实例,它可以被启动,开始、停⽌、删除、每个容器都是互相隔离的,保证安全的平台,可以吧容器看做是要给简易版的linux环境(包括root⽤户权限、镜像空间、⽤户空间和⽹络空间等)和运⾏再其中的应⽤程序
3)repostory仓库
仓库是集中存储镜像⽂件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中⼜包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为两种,公有参考,和私有仓库,最⼤的公开仓库是docker Hub,存放了数量庞⼤的镜像供⽤户下周,国内的docker pool,这⾥仓库的概念与Git类似,registry可以理解为github这样的托管服务。
10、docker的主要⽤途
官⽅就是Bulid 、ship、run any app/any where,编译、装载、运⾏、任何app/在任意地放都能运⾏。
就是实现了应⽤的封装、部署、运⾏的⽣命周期管理只要在glibc的环境下,都可以运⾏。
运维⽣成环境中:docker化。
发布服务不⽤担⼼服务器的运⾏环境,所有的服务器都是⾃动分配docker,⾃动部署,⾃动安装,⾃动运⾏
container容器用法
再不⽤担⼼其他服务引擎的磁盘问题,cpu问题,系统问题了
资源利⽤更出⾊
⾃动迁移,可以制作镜像,迁移使⽤⾃定义的镜像即可迁移,不会出现什么问题
管理更加⽅便了
11、docker改变了什么
⾯向产品:产品交付
⾯向开发:简化环境配置
⾯向测试:多版本测试
⾯向运维:环境⼀致性
⾯向架构:⾃动化扩容(微服务)
⼆、docker架构
1、总体架构
distribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据
registry负责docker registry有关的⾝份认证、镜像查、镜像验证以及管理registry mirror等交互操作
image 负责与镜像源数据有关的存储、查,镜像层的索引、查以及镜像tar包有关的导⼊、导出操作
reference负责存储本地所有镜像的repository和tag名,并维护与镜像id之间的映射关系
layer模块负责与镜像层和容器层源数据有关的增删改查,并负责将镜像层的增删改查映射到实际存储镜像层⽂件的graphdriver模块graghdriver是所有与容器镜像相关操作的执⾏者
2、docker架构2