开发者社区> 问答> 正文

浅谈Docker第一期

随着dotcloud的越发走红,Docker开始浮出水面,这个用Go语言开发的基于LXC的容器引擎,为应用提供了轻量级的环境。
我们在日常的开发和运维中可能会遇到以下的环境部署和管理问题:

  • 当开发人员想去构建自己的开发环境,而该环境需要和生产环境尽可能相近,如何快速有效构建?
  • 当开发人员专注于开发,运维人员需要更新软件,如何保证开发者方便地获取更新?
  • 运维人员从分配机器到装机再到装环境,太多的人肉工作,通常发现开发或许只要2,3天,环境准备和部署需要个2,3天。
  • 在企业中,应用成百上千,应用的部署、迁移、弹性伸缩等如何做?


Docker正是用来解决这些问题的,下面就来简单介绍下Docker用到的三个核心组件 namespaces、cgroups和AUFS。 下一期通过实践的方式来介绍如何在阿里云上使用Docker。


1. namespaces
namespace在一般的编程领域里我们称为命名空间,用来避免命名冲突,在容器世界似乎也可以这么称呼,因为它提供了资源隔离。
有多种不同类型的namespaces,pid、net、ipc、mnt、uts、user等,每种类型都和特别的资源挂钩。拿最常用的pid namespace来说,由于不同namespace有自己的空间,进程id是可以重复的,因此它可以隔离不同用户的进程,不仅如此,不同的pid namespace可以有等级制度,内核会跟踪他们之间的关系。
2. cgroups
cgroups让你能够对进程分配资源,以及实现资源的度量。从概念上说和ulimit有点像,和ulimit不同的是,cgroups是对一组进程做资源配额限制。各个cgroups子系统在此就不做详细介绍了,大家有兴趣可以查官方文档。
3. AUFS
AUFS是一种可堆叠的联合文件系统,能将多个目录整合成单一目录。从下图中可以看出Docker是如何使用AUFS的。




上层的image依赖下层image,下层image称为父(parent)image,parent没有指向的image就是base image。当要从一个image启动一个容器时,Docker会从parent中找到该image的层级关系,并一层层加载,用户的进程运行在最上面的可写层中。

展开
收起
凝凝王君 2014-09-26 18:17:48 10097 0
5 条回答
写回答
取消 提交回答
  • 大家使用 Docker 的场景有哪些?
    2014-10-09 15:48:23
    赞同 展开评论 打赏
  • 感觉分析的狠不错   可惜不太懂
    2014-10-09 10:38:44
    赞同 展开评论 打赏
  • 好文章,值得推荐
    2014-10-02 22:26:51
    赞同 展开评论 打赏
  • 您的帖子非常精彩,期待您的下一帖
    2014-09-30 12:38:22
    赞同 展开评论 打赏
  • Re浅谈Docker第一期
    阿里云在docker进展方面有什么进展吗?比如应用到云服务器和其他产品?
    2014-09-27 21:06:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Docker之道 立即下载
Docker之道 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载