·什么是Docker?
Docker是一种Linux容器技术,一种高效,敏捷和轻量级的容器解决方案,并且支持在多种主流平台(PaaS)和本地部署。Docker是基础Go语言实现的云开源项目,诞生2013年,最初发起者是DotCloud公司,后来改名为Docker Inc,之后专注于Docker相关技术和产品的开发。Docker项目目前已经加入了Linux基金会,遵循Apache2.0开源协议,全部开源代码均在:https://github.com/docker上进行相关维护。
官网地址:https://www.docker.com/
现在docker与openstack同为最受欢迎的云计算开源项目。
Docker的Logo设计为蓝色鲸鱼拖着许多集装箱,构想的思想是要实现:Build,Ship and Run Any App,Anywhere
意思为:通过对应用的封装(Packaging),分发(Distribtion),部署(Deployment),运行(Runtime)生命周期的管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组件,可以是一个web应用,一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统的集群。
基于Linux平台上的多项目】开源技术,Docker=提供了高效,敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流平台。可以说,Docker首次为应用的开发,运行和部署提供了“一站式”的实用解决方案。
·操作系统级虚拟化的历史:
(1)1982年:第一个操作系统级的虚拟化技术是chroot,直到现在我们依然在使用的一个系统调用。这个系统调用会改变运行进程的工作目录,并且只能在这个目录里面工作。这种操作其实就是一种文件系统层的隔离。
(2)2000年:FreeBSD jail,真正意义上的第-个功能完整的操作系统级虚拟化技术。所以,真正的容器化技术出现到现在已经过去了16年,并不是几年的时间。
(3)2005年:OpenVZ,这是1inux平台上的容器化技术实现,同时也是LXC,即docker最初使用的容器技术核心实现。
(4)2008年:LXC发布,这是docker最初使用的具体内核功能实现。
(5)2013年:Docker发布,可以看出,docker最初是使用了LXC,同时封装了其他的一些功能。 Docker的成功,与其说是技术的创新,还不如说是一次组合式的创新。
Docker使用的技术不全是新技术,它将这一系列技术组合在一起,提供极致的用户体验。
Docker的体系结构
Docker使用C/S架构
架构介绍:框架结构.docx
·Docker内部三大核心概念:
镜像(Docker images):Docker 镜像是Docker容器运行时的只读模板,镜像可以用来创建Docker容器。
仓库(Docker repository):类似代码仓库,它是Docker集中存放镜像文件的地方。
容器(Docker containers):利用容器运行,一个Docker容器包含了所有的某个应用运行所需要的环境。
*注意:镜像是只读的,容器在启动的时候创建一层可写作为最上层。
·Docker底层技术
Docker底层的2个核心技术分别是namepaces和control groups
(1)namepaces用来隔离各个容器
pid namepaces:不同用户的进程是通过namepaces隔离开的,且不同的namepaces中可以有相同的pid。
net namepaces:网络隔离是通过net namepaces实现的,每个net namepaces都有独立的network。
ipc namepaces:containter中进程交互是采用linux常见的进程交互方法。
mnt namepaces:本身允许不同namepaces的进程看到的文件结构不同,使用mnt namepaces中的进程所看到的文件目录就被隔离开了。
uts namepaces:允许每个container拥有独立的hostname和domain name,使其在网络上可以被视作一个独立的节点而非host上的一个进程。
user namepaces:每个container可以有不同的user和group id,也就是说可以再container内部用container内部的用户执行程序而非host上的用户。
(2)cgroups(Control groups)实现了对资源的配额和度量
把进程放在一个组里面统一加一控制。
Cgroups可以限制,记录,隔离进程组使所有的物理资源,为容器实现虚拟化提供了基本保证。实现cgroups的主要目的是为了不同用户层面的资源管理提供一个统一化的接口。从单个进程资源控制到操作系统层面的虚拟化。
Cgroups提供了四大功能:
1.资源限制(Resource Limitation) : cgroups 可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上,-旦超过这个配额就发出00M (Out ofMemory)。
2.优先级分配(Prioritization) :通过分配的CPU时间片数量及硬盘I0带宽大小,实际上就相当于控制了进程运行的优先级。
3.资源统计(Accounting) : cgroups可 以统计系统的资源使用量,如CPU使用时长、内存用量等等,这个功能非常适用于计费。
4.进程控制 (Control) : cgroups可 以对进程组执行挂起、恢复等操作。
·Docker特性
1.文件系统隔离:每个进程容器运行在个完全独立的根文件系统里。
2.资源隔离:系统资源,像C和内存等可以分配到不同的容器中,使用Cegrop.
3.网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
4.日志记录: Docker将会收集和记录每个进程容器的标准流
(stdout/stderr/stdin),用于实时检索或批量检索。
5.变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
6.交互式shell Docker可以分配一个虚拟终端并关联到任何容器的标准输入上。
结束:
先介绍到这 感谢大家聆听学习
