随着Docker技术的不断成熟,越来越多的企业开始考虑使用Docker。Docker有很多的优势,如持续集成、版本控制、可移植性、隔离性、安全性和高性能。

另外一方面如何在企业云中实施docker,是直接使用docker(Cloud by Docker)还是将docker运行在vm中进行管理(Docker in Cloud)?

本文将总结优势,分析部署模式,以及最后通过2个视频demo来了解下云中运行docker的模式情况

1.六大优势

1.1 持续部署与测试

Docker在开发与运维的世界中具有极大的吸引力,因为它能保持跨环境的一致性。在开发与发布的生命周期中,不同的环境具有细微的不同,这些差异可能是由于不同安装包的版本和依赖关系引起的。然而,Docker可以通过确保从开发到产品发布整个过程环境的一致性来解决这个问题*Docker容器通过相关配置,保持容器内部所有的配置和依赖关系始终不变。最终,你可以在开发到产品发布的整个过程中使用相同的容器来确保没有任何差异或者人工干预。

使用Docker,你还可以确保开发者不需要配置完全相同的产品环境,他们可以在他们自己的系统上通过VirtualBox建立虚拟机来运行Docker容器。Docker的魅力在于它同样可以让你在亚马逊EC2实例上运行相同的容器。如果你需要在一个产品发布周期中完成一次升级,你可以很容易地将需要变更的东西放到Docker容器中,测试它们,并且使你已经存在的容器执行相同的变更。这种灵活性就是使用Docker的一个主要好处。和标准部署与集成过程一样,Docker可以让你构建、测试和发布镜像,这个镜像可以跨多个服务器进行部署。哪怕安装一个新的安全补丁,整个过程也是一样的。你可以安装补丁,然后测试它,并且将这个补丁发布到产品中。

1.2 多云平台

Docker最大的好处之一就是可移植性。在过去的几年里,所有主流的云计算提供商,包括亚马逊AWS和谷歌的GCP,都将Docker融入到他们的平台并增加了各自的支持。Docker容器能运行在亚马逊的EC2实例、谷歌的GCP实例、Rackspace服务器或者VirtualBox这些提供主机操作系统的平台上。举例来说,如果运行在亚马逊EC2实例上的Docker容器能够很容易地移植到其他几个平台上,比如说VirtualBox,并且达到类似的一致性和功能性,那这将允许你从基础设施层中抽象出来。除了AWS和GCP,Docker在其他不同的IaaS提供商也运行的非常好,例如微软的Azure、OpenStack和可以被具有不同配置的管理者所使用的Chef、Puppet、Ansible等。

1.3 环境标准化和版本控制多云平台

Docker最大的好处之一就是可移植性。在过去的几年里,所有主流的云计算提供商,包括亚马逊AWS和谷歌的GCP,都将Docker融入到他们的平台并增加了各自的支持。Docker容器能运行在亚马逊的EC2实例、谷歌的GCP实例、Rackspace服务器或者VirtualBox这些提供主机操作系统的平台上。举例来说,如果运行在亚马逊EC2实例上的Docker容器能够很容易地移植到其他几个平台上,比如说VirtualBox,并且达到类似的一致性和功能性,那这将允许你从基础设施层中抽象出来。除了AWS和GCP,Docker在其他不同的IaaS提供商也运行的非常好,例如微软的Azure、OpenStack和可以被具有不同配置的管理者所使用的Chef、Puppet、Ansible等。通过上面的讨论,Docker容器可以在不同的开发与产品发布生命周期中确保一致性,进而标准化你的环境。除此之外,Docker容器还可以像git仓库一样,可以让你提交变更到Docker镜像中并通过不同的版本来管理它们。设想如果你因为完成了一个组件的升级而导致你整个环境都损坏了,Docker可以让你轻松地回滚到这个镜像的前一个版本。这整个过程可以在几分钟内完成,如果和虚拟机的备份或者镜像创建流程对比,那Docker算相当快的,它可以让你快速地进行复制和实现冗余。此外,启动Docker就和运行一个进程一样快。

1.4 隔离性

Docker可以确保你的应用程序与资源是分隔开的。几个月前,Gartner发表了一篇报告,这份报告说明了运行Docker 容器进行资源隔离的效果和虚拟机(VM)管理程序一样的好,但是管理与控制方面还需要进行完善。

我们考虑这样一个场景,你在你的虚拟机中运行了很多应用程序,这些应用程序包括团队协作软件(例如Confluence)、问题追踪软件(例如JIRA)、集中身份管理系统(例如Crowd)等等。由于这些软件运行在不同的端口上,所以你必须使用Apache或者Nginx来做反向代理。到目前为止,一切都很正常,但是随着你的环境向前推进,你需要在你现有的环境中配置一个内容管理系统(例如Alfresco)。这时候有个问题发生了,这个软件需要一个不同版本的Apache Tomcat,为了满足这个需求,你只能将你现有的软件迁移到另一个版本的Tomcat上,或者找到适合你现有Tomcat的内容管理系统(Alfresco)版本。

对于上述场景,使用Docker就不用做这些事情了。Docker能够确保每个容器都拥有自己的资源,并且和其他容器是隔离的。你可以用不同的容器来运行使用不同堆栈的应用程序。除此之外,如果你想在服务器上直接删除一些应用程序是比较困难的,因为这样可能引发依赖关系冲突。而Docker可以帮你确保应用程序被完全清除,因为不同的应用程序运行在不同的容器上,如果你不在需要一款应用程序,那你可以简单地通过删除容器来删除这个应用程序,并且在你的宿主机操作系统上不会留下任何的临时文件或者配置文件。

除了上述好处,Docker还能确保每个应用程序只使用分配给它的资源(包括CPU、内存和磁盘空间)。一个特殊的软件将不会使用你全部的可用资源,要不然这将导致性能降低,甚至让其他应用程序完全停止工作。

1.5 安全性

如上所述,Gartner也承认Docker正在快速地发展。从安全角度来看,Docker确保运行在容器中的应用程序和其他容器中的应用程序是完全分隔与隔离的,在通信流量和管理上赋予你完全的控制权。Docker容器不能窥视运行在其他容器中的进程。从体系结构角度来看,每个容器只使用着自己的资源(从进程到网络堆栈)。

作为紧固安全的一种手段,Docker将宿主机操作系统上的敏感挂载点(例如/proc和/sys)作为只读挂载点,并且使用一种写时复制系统来确保容器不能读取其他容器的数据。Docker也限制了宿主机操作系统上的一些系统调用,并且和SELinux与AppArmor一起运行的很好。此外,在Docker Hub上可以使用的Docker镜像都通过数字签名来确保其可靠性。由于Docker容器是隔离的,并且资源是受限制的,所以即使你其中一个应用程序被黑,也不会影响运行在其它Docker容器上的应用程序。

1.6 高性能

我们知道Docker基于LXC,而LXC不同于传统KVM、ESXi、XEN等Hypervisor来模拟物理机运行机理的虚拟化手段,其运作机理是直接在OS层面,通过进程隔离方式来模拟运行环境,这样就减少了由于Hypervisor层带来的“翻译”损耗,在实际测试中LXC的性能几乎可以与物理机相媲美,这是传统VM望尘莫及的,它的这种特性特别适合于HPC、大数据、机器学习等将物理机“榨干运行”的场景,而且有不失快速部署和自动化的能力。

2.关于docker的部署模式

2.1 基于docker的云(Cloud By Docker)

指的是直接使用docker作为云的基础设施(主要是计算能力,作为计算子系统),这种模式下性能最高,但由于docker对于存储、网络能力支持有限所以需要云操作系统提供另外两个子系统的支撑方能更好的运转。

  • 这种模式的好处:享受docker所带来的六大优势(尤其是高性能)、云的各项服务继续使用
  • 挑战是:对于容器的管理、云平台本身对docker的适配

如下是一个云中直接使用lxc以及docker模板来作为计算子系统的视频demo

src="http://player.youku.com/embed/XMTUzNjcyMzQwNA" allowfullscreen="" height="400" width="640">

2.2 云中的docker(Docker in Cloud)

这种模式下也有2种模式:
1、是在IaaS云中提供例如CoreOS这样的VM镜像,并通过支持EC2接口(传递user data)可以快速部署docker,并且基于云平台的VPC(云网络与格力)、ELB(负载均衡)、EBS(弹性块存储)给与docker更好的支持。

  • 这种模式的好处:云平台只要支持EC2接口即可立即使用docker带来的各种好处
  • 挑战是:vm带来的性能损耗、对于docker的容器的管理

如下是一个支持EC2接口的云中,采用CoreOS模板运行docker并使用云中的ELB(负载均衡)的demo视频:

src="http://player.youku.com/embed/XODk5ODg4NTcy" allowfullscreen="" height="400" width="640">

2、云平台需提供PaaS能力—ECS(弹性容器服务)服务,在这种模式下docker将作为一类托管对象(host)云中快速提供(类似Elastic Beanstalk)只要你输入参数,云平台将自动创建docker集群并且维系集群的可用性与弹性。

  • 这种模式的好处:用户只需关注应用开发,而应用的资源的弹性和HA由云来保障
  • 挑战是:vm带来的性能损耗

;-)很快提供这个视频……