前言
Docker 是一个
开源的应用容器引擎
,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows
操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!
Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维的概念
- 一、应用
- 二、Sandbox
- 三、PaaS
- 四、Open Solution
- 1. disk/network quota
- 2. RHEL 6.5
- 五、Docker Datacenter
- 六、IT运维
一、应用
有了docker这么个强有力的工具,更多的玩家希望了解围绕docker能做什么
二、Sandbox
作为sandbox大概是container的最基本想法了 - 轻量级的隔离机制, 快速重建和销毁, 占用资源少
。用docker在开发者的单机环境下模拟分布式软件部署和调试,可谓又快又好。
同时docker提供的版本控制和image机制以及远程image管理,可以构建类似git的分布式开发环境
。可以看到用于构建多平台image的packer以及同一作者的vagrant已经在这方面有所尝试了,笔者会后续的blog中介绍这两款来自同一geek的精致小巧的工具。
Docker已经不仅仅是DevOps人员手中的神器了,每一个开发者都应该学会如何使用Docker。
三、PaaS
dotcloud、heroku以及cloudfoundry都试图通过container来隔离提供给用户的runtime和service,只不过dotcloud采用docker,heroku采用LXC,cloudfoundry采用自己开发的基于cgroup的warden
。基于轻量级的隔离机制提供给用户PaaS服务是比较常见的做法 - PaaS 提供给用户的并不是OS而是runtime+service,因此OS级别的隔离机制向用户屏蔽的细节已经足够。而docker的很多分析文章提到『能够运行任何应用的“PaaS”云』只是从image的角度说明docker可以从通过构建 image实现用户app的打包以及标准服务service image的复用,而非常见的buildpack的方式。
由于对Cloud Foundry和docker的了解
,接下来谈谈笔者对PaaS的认识。PaaS号称的platform一直以来都被当做一组多语言的runtime和一组常用的middleware,提供这两样东西
即可被认为是一个满足需求的PaaS
。然而PaaS对能部署在其上的应用要求很高:
- 运行环境要简单 - buildpack虽然用于解决类似问题,但仍然不是很理想
- 要尽可能的使用service - 常用的mysql, apache倒能理解,但是类似log之类的如果也要用
service就让用户接入PaaS平台,让用户难以维护
- 要尽可能的使用"平台” - 单机环境构建出目标PaaS上运行的实际环境比较困难,测试工作都离不开"平台”
- 缺少可定制性 - 可选的中间件有限,难于调优和debug。
综上所述部署在PaaS上的应用几乎不具有从老平台迁移到之上的可能,新应用也难以进入参数调优这种深入的工作。个人理解还是适合快速原型的展现,和短期应用的尝试。
然而docker确实从另一个角度(类似IaaS+orchestration tools)
实现了用户运行环境的控制和管理,然而又基于轻量级的LXC机制,确实是一个了不起的尝试。
笔者也认为IaaS + 灵活的orchestration tools(深入到app层面的管理 如bosh)
是交付用户环境最好的方式。
国内也已经开始出现基于Docker的PaaS。2015年3月11日,云雀Alauda云平台正式开启内测,对外提供基于Docker的PaaS服务
。
四、Open Solution
前文也提到docker存在disk/network不便限额和在较低版本kernel中(如RHEL的2.6.32)AUFS不支持的问题。
1. disk/network quota
虽然cgroup提供IOPS之类的限制机制,但是从限制用户能使用的磁盘大小和网络带宽上还是非常有限的。
Disk/network的quota有两种思路:
- 通过
docker run -v命令将外部存储mount到container的目录下,quota从Host方向限制
,在device mapper driver中更采用实际的device因此更好控制。 - 通过使用disk quota来限制AUFS的可操作文件大小。类似cloud foundry warden的方法, 维护一个UID池,
每次创建container都从中取一个user name, 在container里和Host上用这个username创建用户,在Host上用setquota限制该username的UID的disk
. 网络上由于docker采用veth的方式,可以采用tc来控制host上的veth的设备。
2. RHEL 6.5
这里简单介绍下device mapper driver的思路:
docker的dirver要利用snapshot机制,起初的fs是一个空的ext4的目录,然后写入每个layer。每次创建image其实就是对其父image/base image进行snapshot,
然后在此snapshot上的操作都会被记录在fs的metadata中和AUFS layer,docker commit将 diff信息在parent image上执行一遍
.
这样创建出来的image就可以同当前container的运行环境分离开独立保存了。
五、Docker Datacenter
Docker Datacenter将五个之前独立的产品组合在一起,使用统一的Docker管理接口
:管理用的Universal Control Plane;安全方面的Content Trust;编排用的Swarm;容器运行时的Engine;以及Trusted Registry。目标是填补两处空白,一处是使用Docker在开发、测试、质量保证和生产环境间打包应用,另一处是容器管理还不直接的传统IT运维。
六、IT运维
这里简单理解一下IT运维的概念
IT运维管理是时下IT界最热门的话题之一.随着IT建设的不断深入和完善,计算机硬软件系统的运行维护已经成为了各行各业各单位领导和信息服务部门普遍关注和不堪重负的问题
.由于这是一个随 着计算机信息技术的深入应用而产生的新课题,因此如何进行有效的 IT 运维管理,这方面的知识积累和应 用技术还刚刚起步.对这一领域的研究和探索,将具有广阔的发展前景和巨大的现实意义
所谓 IT运维管理,是指单位 IT 部门采用相关的方法、手段、技术、制度、流程和文档 等,对IT软硬运行环境、IT 业务系统和 IT 运维人员进行的综合管理
。
企业将IT部门的职能全部或部分外包给专业的第三方IT外包公司管理,集中精力发展企业的核心业务
。简单的说就是企业在内部专职IT运维人员不足或没有的情况下,将企业的IT外包服务流程,包括全部办公硬件、网络及外设的维护工作转交给专业从事IT运维的公司来进行全方位的维护。
如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下⭐,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。