微信号:HuashengPeng001

介绍:运维体系建设心得,自动化(监控、配置、平台建设等)、运维开发、应用运维(变更、故障等)等,欢迎各位运维同业多多拍砖,共同进步.

docker 快速入门

2015-11-17 07:53 CGB

1、什么是docker

通俗的讲,简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案,用于’构建、交付和运行’分布式应用(Build, Ship, and Run Any App, Anywhere)。它最初是 DotCloud 的一个开源项目,于2013年3月发布。因这个项目很受欢迎,以至于 DotCloud 公司直接更名为 Docker 公司(并最终出售了原有的 PaaS 业务)。


2、与LXC有什么不同

LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。

LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在clone时加入相应的flag(NEWNS NEWPID等等)

你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能。在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等。


3、docker与虚拟机的对比

如下图所示,左边是虚拟机,右边是docker,从图中可以看到,普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等。每个container拥有自己独立的各种命名空间(亦即资源)包括:PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名。


通常来看,docker可以实现虚拟机的大部份功能,同时解决了虚拟机一些缺点,具体的对比如下:


比如,安装CoreOS的小型虚拟机居然有1.2GB, 而装上busybox的小型容器只有2.5MB。最快的虚拟机启动时间也是分钟级的,而容器的启动时间通常不到一秒。在同一宿主机上安装虚拟机需要正确的设置网络, 而安装Docker非常简单。


4、devops

DevOps是目前比较火的一个名词,顾名思义,它就是让开发与运维通力合作的一种指导思想(也可以说是一个IT工作文化)。它是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。它是人们为了及时生产软件产品或服务,以满足某个业务目标,对开发与运维之间相互依存关系的一种新的理解。”这恰好体现了精益管理中的客户价值原则,即:以客户的观点来确定企业从设计到生产交付的全部过程,实现客户需求的最大满足。我们也可以把DevOps看作是一种能力,在缺乏这种能力的组织中,开发与运维之间存在着信息”鸿沟”。

但devops在推广过程中,因为开发与、运维之间的对共同价值的认定不同,困难重重,比如开发和运维在选择工具和环境时的姿态通常差别很大。开发者想要使用一些闪亮的新东西,比如Node.js、Rust、Go、微服务、Cassandra、Hadoop、blablabla.........而运维则倾向于使用以往用过的工具,因为事实证明那些旧的工具很有效。docker的出现,就像是给开发者和运维之间提供一份双方都能接受的“合约”。Docker快速部署、轻量、隔离开发与生产之间差异的特点成为这份“合约”的亮点,运维喜欢它,因为Docker让他们只要关心一件事: 部署容器, 而开发者也一样很开心,只要写好代码,然后往容器里一扔,剩下的交给运维就完事了。


5、更好的资源利用

很多年前,那时候还没有虚拟化,当我们需要创建一个新服务时,我们必须申请实际的物理机硬件。 这可能要花上数月,依赖于公司的流程。一旦服务器到位,我们创建好服务,很多时候它并没有像我们希望的那样成功,因为服务器的CPU使用率只有5%。 太奢侈了。

接着,虚拟化来了。它可以在几分钟之内把一台机器运转起来,还可以在同一硬件上运行多个虚拟机,资源使用率就不只5%了。但是,我们还需要给每个服务分配一个虚拟机,因此我们还是不能如愿的使用这台机器。

容器化是演化进程的下一步。容器可以在几秒之内创建起来,而且还能以比虚拟机更小的粒度进行部署。


6、Docker如何工作

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问, 客户端和守护进程也可以运行再同一主机上,但这不是必须的。Docker命令行客户端也是类似的工作方式,但它通常通过Unix域套接字而不是TCP套接字连接。守护进程从客户端接受命令并管理运行在主机上的容器。



7、Docker 概念及相互作用

主机, 运行容器的机器。

镜像,文件的层次结构,以及包含如何运行容器的元数据

容器,一个从镜像中启动,包含正在运行的程序的进程

Registry, 镜像仓库

卷,容器外的存储

Dockerfile, 用于创建镜像的脚本

我们可以通过Dockerfile来构建镜像, 还可以通过commit一个运行的容器来创建一个镜像,这个镜像可以会被标记,可以推到Registry或者从Registry上拉下来,可以通过创建或者运行镜像的方式来启动容器,可以被stop,也可以通过rm来移除它。

具体的概念后面专题介绍。




 
运维之路 更多文章 全球运维大会心得 聊聊对APM的理解 应用运维标准化之——事件\/故障处理标准化 应用运维体系之建立统一的应用运维平台思路 【摘文】周例会流程及说明
猜您喜欢 前端开发基础-JavaScript(四) [CSDN转载]ZStack深度试用:部署、架构与网络及其与OpenStack的对比 详解代理自动配置 PAC 3年以上工作经验的工程师中长期职业规划 面试穿衣技巧 穿出未来