docker学习笔记1
Docker学习第一周:
Docker引入-PAAS平台:
Platform as a Service:平台作为服务
Marketplace DataMarket App
Frameworks caching composite App
Security Accouts conrd
Intergration
PASS平台的范围和内容:
1 确定产品定位和需求,确定首次迭代的范围
2 制作界面原型
3 技术选型,然后根据技术选型为每个开发者搭建开发环境和技术栈,例如java环境,python环境,Ruby环境,数据库,中间件等
4 构建基础技术框架和服务,包括日志,存储,消息,缓存,搜索,数据源,集群扩展等
5 模拟用户容量,构建测试环境。
6 开始编写真的业务代码,实现产品功能。
7 迭代开发/测试,生生不息,周而复始,直到头发掉光为止。。。
老一代的PASS平台的局限性和困境
1 主要提供应用的部署和托管
2 针对应用开发者
3 仅支持特定的IaaS基础技术
4 支持单中开发语言和框架
5 支持特定的服务,比如自定义的数据存储APIs
6 没有很好的解决常用中间件的部署问题
7 难以解决应用和资源的隔离问题。
新一代的PAAS平台:
新一代的云应用平台技术则实现全方位(包括应用的部署,下架)的应用生命周期管理,关注开放性,引用的可移植性和云间相互操作性,代表者有Cloud Foundry,OpenShift(红帽的技术,最新的完全迁移到k8s上),Docker,Heroku,MoPaaS等PaaS技术或服务,除了在第一代PaaS技术对用户在实现引用交付的加速所提供的功能外,具备一下大多数特征:
多语言和框架:支持多语言和框架以及语言框架的扩展机制
多服务:开放的核心服务以及服务的扩展机制
多云和多IaaS技术:支持多种IaaS技术和多云的部署,包括公有云和私有云
Dockers:
被称为第三代PaaS平台,dotclound不仅支持诸如PHP,MySql的传统技术框架,还包括Node.js,MongoDB等新兴技术。基于dotCloud提供的开发工具和技术框架,你可以直接使用dotCloud的SDK编写代码和构建业务服务,并在联网的时候把这些代码推送到云端,实现自动部署和测试。
Docker的诞生和幕后的公司
2010年成立了一家做PaaS平台的公司,取名为dotclound,dotCloud主要是基于PaaS平台为开发者或者开发商提供技术服务。
Docker生态圈

Docker已经收购了一系列创业公司,包括KiteMatic,Koality和Socketplane。完成新一轮投资后,Docker计划加快产品推进计划。现在主要在存储,网络和安全三个产品方向发力(2015)
红帽在新的RHEL7版本中增添了支持Docker的功能,IBM公开拥抱Docker和容器,亚马逊推出了EC2容器服务,就连公认的竞争对手VMware也宣布支持Docker
Docker的技术原理介绍:
Docker就是虚拟化的一种轻量级替代技术。Docker的容器技术不依赖任何语言,框架和系统,可以将App变成一种标准化的,可移植的,自管理的组建,并脱离服务器硬件在任何主流系统中开发,调试和运行。
简单的说就是在Linux系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装,部署和升级。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是Docker最普遍的玩法。

Docker相关的核心技术

Docker相关的核心技术之cgroups
Linux中经常有个需求就是希望能限制某个或者某些进程的分配资源,于是就出现了cgroups的概念,cgroup就是controller group,在这个goup中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。Cgroups是将任意进程进行分组化管理的Linux内核功能。最初由google的工程师提出,后来被整合进Linux内核中。
Cgroups中的重要概念是子系统,也就是资源控制器,每种子系统就是一个资源的分配器,比如CPU子系统是控制cpu时间分配的。首先挂载子系统,然后才有control group的,比如先挂载memory子系统,然后在memory子系统中创建一个cgroup节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入,这就完成了内存的资源限制。
Cgroups被Linux内核支持,有得天独厚的性能优势,发展势头迅猛,在很多领域可以取代虚拟化技术分割资源。Cgroup默认有诸多资源组,可以限制几乎所有服务器上的资源:cpu,mem iops,iobandwide,net,device acess等。
Dockers相关的核心技术之LXC
LXC是Linux containers的简称,是一种基于容器的操作系统层次的虚拟化技术。借助于namespace(命名空间,被戏称为平行空间,你能看见你的,我能看见我的,但是我们相互看不见)的隔离机制和cgroup限额功能,LXC提供了一套统一的API和工具来建立和管理container。LXC跟其他操作系统层次的虚拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁。
LXC旨在提供一个共享kernel的OS级虚拟化方法,在执行时不用重复加载kernel,且container的kernel与host共享,因此可以大大加快container的启动过程,并显著减少内存消耗,容器在提供隔离的同时,还通过共享这些资源节省开销,这意味着容器比真正的虚拟化的开销小的多,在实际测试中,基于LXC的虚拟化方法的IO和CPU性能几乎接近baremetal的性能。
虽然容器所使用的这种类型的隔离总的来说非常强大,然而是不是像运行在hypervisor上的虚拟机那么强壮仍具有争议性,如果内核停止,那么所有的容器都会停止运行。
性能方面:LXC>KVM>>XEN
内存利用率:LXC>KVM>>XEN
隔离程度:XEN>>KVM>>LXC
要把容器和虚拟技术结合在一起?
Docker相关的核心技术之AUFS
AUFS是一个能够透明覆盖一个或者多个现有文件系统的层状文件(类似photoshop,好处是你可以在新的层上面加新的东西,而不影响原有层)系统。支持将不同目录挂载到同一个虚拟文件系统下,可以把不同的目录联合在一起,组成一个单一的目录。这是一种虚拟的文件系统,文件系统不用格式化,直接挂载即可。
Docker一直在用AuFS作为容器的文件系统。当一个进程需要修改一个文件时,AuFS创建该文件的一个副本。AuFS可以把多层合并成文件系统的单层表示。这个过程称为写入复制(copy on write)。
AuFS允许Docker把某些镜像作为容器的基础,例如,你可能有一个可以作为很多不同容器的基础的CentO S系统镜像。多亏AuFA,只要一个CentO S镜像的副本就够了,这样既节省了存储和内存,也保存更快速的容器部署。
使用AuFS的另一个好处是Docker的版本容器镜像能力。每个新版本都是一个与之前版本的简单差异改动,有效地保持镜像文件最小化。但,这也意味着你总是要有一个记录该容器从一个版本到另一个版本改动的审计跟踪。
Docker原理之App打包

LXC的基础上,Docke额外提供的Feature包括:标准统一的打包部署运行方案。
为了最大化重用image,加快运行速度,减少内存和磁盘footprint,Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。例如一个apache的运行环境可能是在rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,在叠加包含apache及其相关依赖library的image,这些image有AuFS文件系统加载合并到统一路径中,以只读的方式存在,最后在叠加加载一层可写的空白的Layer用作记录对当前运行环境所有的修改。
有了层级化的Image做基础,理想中,不同的App就可以既可能的共用底层文件系统,相关依赖工具等,同一个App的突通实例也可以实现共用绝大多数数据,进而以copy on write的形式维护自己的那一份修改过的数据等。
Docker全生命周期开发模式

Docker正在迅速改变云计算领域的运行规则,并彻底颠覆云技术的发展前景。从持续集成/持续交付到为服务,开源协作乃至DevOps,Docker一路走来已经给应用程序开发生命周期以及云工程技术实践带来了巨大变革。
(把开发衍生到了部署,之前开发是写好程序,编译好程序即可。Docker Hub对开发来说类似于SVN,里面存放的是打包好的镜像。在安装时如果本地没有,则可以从hub上拉取。关于镜像,打一个标准化的镜像,例如安装mysql以及一些参数的设置。)
Docker的基本概念
Docker Image
Docker image是一个极度精简版的Linux程序运行环境,比如Vi这种基本的工具没有,官网的Java镜像包括的东西更少,除非是镜像叠加方式的,如CentOS+Java7
Docker Image是需要定制化Build的一个“安装包”,包括基础镜像+应用的二进制部署包。
Docker Image 内不建议有运行期需要修改的配置文件
Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。当前目录下包含Dockfile,使用命令build来创建新的image
Docker Image的最佳实践之一是尽量重用和使用网上公开的基础镜像
Docker Container
Docker Container是Image的实例,共享内核
Docker Container里可以运行不同的OS的Image,比如Ubuntun的或者是Centos
Docker Container不建议内部开启一个SSHD服务,1.3版本后新增了docker exec命令进入容器排查问题。
Docker Container没有IP地址,通常不会有服务端口暴露,是一个封闭的“盒子/沙箱”
Docker Container的生命周期
容器可以被创建,运行,暂停,kill。容器里面运行的程序是在前台运行的,当命令运行结束之后,container就结束了。

Docker Daemon
Docker Daemon是创建和运行Container的Linux守护进程,也是Docker最主要的核心组件
Docker Daemon可以理解为Docker Container的Container
Docker Daemon可以绑定本地端口并提供Rest Api服务,用来远程访问和控制。
Dockers Registry/Hub
Docker之所以这么吸引人,除了它的新颖的技术外,围绕Registry(Dockers Hub)的生态圈也是相当吸引人眼球的地方。在Docker Hub上你可以很轻松的下载大量已经容器化好的应用镜像,即拉即用。在这些镜像中,有些是Docker官方维护的,更多的是众多开发者自发上传分享的。而且你可以在Docker Hub中绑定你的代码托管系统(目前支持GitHub和Bitbucket)配置自动生成镜像功能,这样Docker Hub会在你代码更新时自动生成对应的Docker镜像。
Docker Hub是dotCloud公司私有的,国内曾有公司试图提供镜像服务,但被禁止。目前国内只有一个DaoCloud提供代理缓存服务(镜像可以拉取,但是不能克隆)
Docker核心组件的关系
Docker学习基本技能:
Linux基本操作和基本知识:磁盘,文件,日志,用户,权限,安全,网络,建议centos/redhat
虚拟相关技能:vmware workstation/virtbox熟练使用,虚机clone,组网,host-only网络,nat网络等熟练操作。

浙公网安备 33010602011771号