docker是什么
- Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。
- LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。
- Docker在LXC基础上进一步封装,使得操作更为简便。用户操作Docker容器就像操作一个快速轻量级的虚拟机一样简单。
- 使用docker带来的好处
docker的好处
- 更便捷的交付和部署
对开发和运维(devops)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。Docker 容器很轻很快,容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
另外,作为sandbox大概是container的最基本想法了 – 轻量级的隔离机制, 快速重建和销毁, 占用资源少。用Docker在开发者的单机环境下模拟分布式软件部署和调试,可谓又快又好。 - 更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。 - 更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。 - 更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
同时 Docker提供的版本控制和image机制以及远程image管理,可以构建类似git的分布式开发环境。
docker应用场景
- 构建标准化的运行环境
现有的方案大多是在一个base OS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。 - 构建私有PaaS环境(PaaS是Platform-as-a-Service的缩写,意思是平台即服务。 把服务器平台作为一种服务提供的商业模式)
PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础。 - 自动化测试与持续集成
因为其标准化构建方法(buildfile)和良好的REST API,自动测试和持续集成/部署能够很好的集成进来 - 应用横向扩展
因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源,尤其是需要快速启停来应对峰谷的web应用。
docker不足
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结了几点:
- Docker是基于Linux 64bit的,无法在windows/unix或32bit的linux环境下使用(虽然64-bit现在很普及了)
- 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
- 网络管理相对简单,主要是基于namespace隔离 (一种资源隔离技术,主要实现6大隔离功能,文件隔离,网络隔离,进程间通信的隔离,用户权限隔离,与宿主机中的PID进行隔离)
- cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是安内存收费)
- docker对disk的管理比较有限
- container随着用户进程的停止而销毁,container中的log等用户数据不便收集
卢艳红
- 容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层
- cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。
网友评论