Docker 的五大优点:持续部署、版本控制、可移植性、隔离性和安全性

我相信 Docker 不需要我过多介绍,它是目前最热门的开源项目之一。您可以使用 Docker 在容器中添加一个抽象层以部署不同的应用程序。在 Docker 生态的不断发展之下,Docker 的优点将会不断增加。在这篇文章中,我不会讨论 Docker 是什么以及它的工作原理,而将概述使用 Docker 这个不断发展的平台的五大优点。

持续部署和测试

Docker 因其能在不同环境中保持一致性,在开发者及运维中发展迅猛。在整个开发和发布的生命周期中,不同环境之间总会有细微的差别,除非您拥有自己的私有存储库,并且有严格的环境检查。这些差异可能是不同的软件包版本或依赖关系所造成的。而 Docker 可以通过确保从开发到生产的环境一致性来解决这个问题。 Docker 在容器内部维护所有配置和依赖关系。因此,您可以从开发到生产使用相同的容器,确保没有环境之间的差异或人工干预。

使用 Docker 容器,您还可以确保开发人员不再需要配置一套与生产环境相同的环境。现在他们可以使用自己的系统在 VirtualBox 上运行 Docker 容器。 Docker 的优点在于,您可以在不同实例上运行相同的容器。如果您需要在产品发布周期中执行升级,只需要对 Docker 容器进行必要的更改,对其进行测试,并对现有容器推送相同的更改。这种灵活性是使用 Docker 的关键优势。正如标准的部署和集成过程一样,Docker 允许您构建、测试和发布一个跨不同服务器的应用映像。即使有新的安全补丁发布,您只需要采用同样的处理方式,应用该补丁,测试并将其发布到生产环境中。

多云服务平台支持

Docker 最大的优点之一就是可移植性。在过去几年中,包括亚马逊网络服务(AWS)和谷歌计算平台(GCP)在内的所有主要云计算提供商都已经认可了 Docker 的可用性并提供了支持。 Docker 容器可以在例如 Amazon EC2 实例、Google Compute Engine 实例,Rackspace 服务器或 VirtualBox 中运行,只需要主机所运行的操作系统支持 Docker。这样,运行在某个云服务实例上的容器可以很容易地在各个环境之间移植,比如移植到 VirtualBox,来实现一致的功能。这将抽象化您的基础架构。除了 AWS 和 GCP 之外,Docker 还可以与其他各种基础设施及服务(IaaS)提供商(如 Microsoft Azure 和 OpenStack)配合使用,并且可以与各种配置管理器(如 Chef、Puppet 和 Ansible)一起使用。

环境标准化和版本控制

正如上面所说,Docker 容器标准化您的使用环境,确保不同开发者和发布周期之间的环境一致性。最重要的是,Docker 容器就像 GIT 仓库一样工作,您可以提交对某个 Docker 镜像的修改和并进行版本控制。假设您执行一个组件升级,而这个升级破坏了整个应用环境,您可以在几分钟内回滚到以前版本的 Docker 镜像。与一般的虚拟机备份和映像创建过程相比,Docker 速度更快,可以让您快速进行容器复制并实现环境冗余。此外,启动一个 Docker 镜像就像运行普通进程一样快。

隔离

Docker 确保您的应用程序和所分配的资源在容器间相互隔离。几个月前,Gartner(美国一家大型科技咨询公司)发布了一份报告,指出在资源隔离方面,Docker 容器和虚拟机管理程序一样好,但是在资源管理方面还有很多工作要做。

让我们假设这样一个场景,您需要在虚拟机上运行多个应用程序。这些应用可以是团队协作软件(例如 Confluence),问题跟踪软件(例如 JIRA),统一身份管理系统(例如 Crowd)等。由于所有这些应用程序运行在不同的端口上,您需要在 Apache 和 Nginx 上反向代理到应用程序上。到目前为止,一切都很好,但随着项目向前发展,您现在还需要在现有环境中配置一套内容管理系统(例如 Alfresco)。此时突然发现,它需要一个与线上版本不同的 Apache Tomcat。为了解决这个问题,您可以将现有的应用程序移动到另一个版本的 Tomcat 上,或者在当前部署的版本上运行您的内容管理系统(Alfresco)。

两种选择都有利有弊。幸运的是,在 Docker 中,您不必这样做。 Docker 确保每个容器都有自己的资源,并与其他容器相互隔离。您可以为不同的应用程序运行完全不同的基础设施。除此之外,有时从服务器中移除应用程序相当困难,甚至可能导致依赖关系的冲突。但是,由于现在每个应用程序都在自己的容器上运行,Docker 可帮助您安全地移除应用程序。如果您不再需要某个应用程序,只需要简单地删除运行它的容器。它不会在主机上留下任何临时或配置文件。

除了这些优势之外,Docker 还确保每个应用程序只使用分配给它们的资源(CPU,内存和磁盘空间)。资源耗尽通常会导致性能下降或导致其他应用程序完全不可用。有了资源隔离,不再会有某个特定的应用程序占用所有的可用资源,提高了服务的整体可用性和稳定性。

安全

如上所述,甚至 Gartner 这样的大型咨询公司都承认,Docker 正在快速发展。从安全的角度来看,Docker 可以确保在不同容器上运行的应用程序之间相互隔离,使您可以完全控制容器之间的交互。Docker 容器不可以查看在另一个容器内运行的进程。从架构的角度来看,每个容器都只能使用自己被分配的资源,包括任务处理和网络堆栈,意味着在默认情况下它们不能访问其他容器的 sockets 或接口。

作为提高安全性的手段,Docker 在容器中将主机的敏感挂载点(例如 /proc 和 /sys)挂载为只读,并使用了一套写入时复制的文件系统来确保容器间不能读取彼此的数据。它还限制容器内的应用程序对主机进行系统调用,而且还与 SELinux 和 AppArmor 这样的安全措施保持良好兼容。此外,Docker Hub 上所有的 Docker 镜像都有数字签名,以确保用户使用的镜像是完整、未被第三方修改的。由于 Docker 容器之间是隔离的,而且容器的资源是有限的,即使您的一个应用程序被入侵或崩溃,也不会影响在其他 Docker 容器上运行的应用程序。

最后的注意

与云计算相结合,上面提到的优点说明了为何 Docker 是一个有效的开源平台。虽然使用 Docker 的优点很多,我今天只是想强调所列出来的前五大优点。如果您使用 Docker,请务必分享您的使用案例或者您所享受到的各种好处。

本文的版权归 Xiaoxing Ye 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Linux 容器 vs 虚拟机 —— 谁更胜一筹

自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手。本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异。 Linu...

2804
来自专栏SDNLAB

Kubernetes正式支持Containerd 1.1版

1724
来自专栏喵了个咪的博客空间

Kubernetes(一) - Docker管理工具

1373
来自专栏云计算

Docker带来的五大益处:CI,版本控制,可移植性,隔离性和安全性

Docker的跨环境一致性在开发界已经获得了广泛认可。通常情况下,开发阶段和正式发布的环境之间总会有细微的差异。除非你拥有自己的私有仓库,并严格检查。这些差异可...

2919
来自专栏云计算D1net

8个你可能不知道的Docker知识

自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,发生的最大的变革莫过于容器和容器管理工具,例如:Docker。在过去的一年内,Dock...

3605
来自专栏逸鹏说道

KVM基于内核的虚拟机概念理解与客户机浅析

作为一个KVM的学习者,如果你想要自己完善一个KVM样品级的解决方案,仅仅学会图形化界面使用和简单的配置(详情见上一篇文章)是远远不够的。在上文中感谢@laow...

3754
来自专栏云计算D1net

为什么Docker会受欢迎?看完这些才恍然大悟

Docker不是唯一的容器平台,也不是第一个推出的。其他框架,如OpenVZ和LXC,从20世纪20年代中期诞生。而其他类似容器的技术,如FreeBSD更进一步...

3266
来自专栏云计算

容器只是一个起点

容器,Docker,Kubernetes已经出现有四年了。以致于有些人甚至认为这项技术是成熟的!但是,我强烈认为,容器基础设施的构造任然处于成长阶段。

2109
来自专栏Debian社区

Linux 容器 vs 虚拟机 — 谁更胜一筹

自从 Linux 上的 容器 变得流行以来,了解 Linux 容器和虚拟机 之间的区别变得更加棘手。本文将向您提供详细信息,以了解 Linux 容器和虚拟机之间...

1192
来自专栏磨磨谈

基于发行版本内核打造自己的内核

Linux当中最核心的部分就是内核,这个也是最基础,最可能被忽视的一部分,随便找一个刚入职的运维,学习个两三天,网上找些资料也能能自己安装编译内核了,很多运维的...

812

扫码关注云+社区