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

相关文章

来自专栏彭湖湾的编程世界

【计算机网络】 网络体系结构分类: 客户机/服务器体系和P2P

网络体系结构的分类 现代网络应用程序有两种主流的体系结构: 客户机/服务器体系结构和P2P体系结构(peer to peer “对等”) 一 . 客户机/服务器...

17910
来自专栏我的博客

Collectd介绍

collectd是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。它会在系统运行和存储信息时周期性的统计系统的相关统计信息。...

2736
来自专栏后端之路

mysql binlog压缩处理

前一段时间系统mysql压力较大,产生大量binlog,大量的binlog删除后又担心后期出现问题难以调查,保存后又占用本身的空间存储。 ? 每天产生的bin...

2318
来自专栏魏艾斯博客www.vpsss.net

监测 Linux 服务器 CPU 和内存占用的方法

2705
来自专栏猿人谷

三种Linux服务器监控技术的对比

本文介绍三种Linux服务器监控技术的优缺点,其中有SNMP代理(客户端)方式、SSH方式、安装私有代理(客户端)方式等内容。 Linux系统的强大的功能和绚丽...

1897
来自专栏SDNLAB

OpenStack虚机网卡的创建过程

OpenStack最基本和常用的操作就是启动虚机。虚机启动的过程中涉及很多内容,其中非常重要的一个环节就是创建并绑定虚机的虚拟网卡。虚机的创建和管理是Nova的...

2696

Docker平台和Moby项目添加Kubernetes

Docker平台正在集成对Kubernetes的支持,以便Docker客户和开发人员可以选择使用Kubernetes和Swarm来编排容器工作负载。点击注册测试...

1738
来自专栏北京马哥教育

当下流行的分布式文件系统大阅兵

  本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括:Lustre、Hadoop、MogileFS、FreeNAS、FastDFS...

3337
来自专栏

Docker平台和Moby项目添加Kubernetes

Docker平台正在集成对Kubernetes的支持,以便Docker客户和开发人员可以选择使用Kubernetes和Swarm来编排容器工作负载。

2195
来自专栏云加新鲜事儿

腾讯云负载均衡的使用

负载均衡:暴露给用户的IP只有一个,后端机器故障上线先对用户无感知,后端机器可以根据性能差异调整权重,分配访问量。从创建负载均衡。负载均衡可在云中的多个CVM实...

1.5K0

扫码关注云+社区