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 条评论
登录 后参与评论

相关文章

来自专栏EAWorld

Flannel+K8s容器网络通信实践

? 亲爱的各位朋友,大家好! 今天很高兴可以和大家分享我们普元云平台SEM使用kubernetes时,关于pod、service网络通讯的实践与大家分享。 以...

3718
来自专栏企鹅号快讯

【分享吧】带你初识Docker

一、引言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖、便捷的软件集成测试与部署之道。Docker借助容器技术彻底释放了...

2155
来自专栏大魏分享(微信公众号:david-share)

容器生产落地需要考虑的几点因素

前言: 本文是笔者与同事陈耿共同完成,不代表任何官方观点。 随着容器技术的持续发酵,以及互联网+应用的持续扩张,目前金融行业使用容器云上生产的案例越来越多。在本...

2994
来自专栏CSDN技术头条

如何解决容器网络性能及复杂网络部署问题?

近两年,容器已经随着 Docker 技术的传播火遍全球,现在已经有越来越多的企业用户在开发、测试甚至生产环境中开始采用 Docker 等容器技术。 然而,目前主...

32610
来自专栏云计算D1net

IT人士需要了解的云中容器的术语

如今如果没有提及容器,就很难谈论云计算。无论技术新手还是经验丰富的专家,都需要了解与云中容器相关的这些关键术语。 随着云计算中容器的普及,更多的组织选择不考虑...

34511
来自专栏zhangdd.com

Docker简介

Docker是开源项目。Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是dotCloud公司。Docker自开源后受到广泛的关注和讨...

1152
来自专栏编程坑太多

『中级篇』Kubenetes简介(60)

PS:了解我的老铁都知道,概念讲的少,更多重在实践,通过实践更好的理解概念,从下次开始怼k8s的环境和集群。如果跟我一起学的老铁,应该可以感受的到,在学习doc...

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

Kubernetes(一) - Docker管理工具

1143
来自专栏吴伟祥

Docker学习——Kubernetes(八) 顶

273
来自专栏农夫安全

浅析Docker的基础和应用场景

1、什么是LXC LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资...

35912

扫码关注云+社区