论Docker与云计算的关系 以及对其安全性的探讨
这其实是我关于粽叶那篇文章的原稿,之前写的
-----20220603,我真的好懒啊,考完试一定天天更!
摘要:近年来,我们已经看到,需要计算能力来解决日益复杂的挑战,云计算在市场中越来越重要。 Docker 目前在云计算市场的领先地位日益稳固,许多互联网公司都会选择使用 Docker 工具,但 Docker 作为一个方便创建和管理容器的工具,和云计算之间的联系是什么呢,它运行时,能否确保环境安全与部署安全性呢?本文从云计算初学者的角度,主要论述了以下问题:云计算是什么,与 Docker 之间的关系,并且解释论述 Docker 的部署安全性与环境安全。
1 云计算与Docker
本块内容为介绍云计算与Docker之间的关系,我将此块部分分为3块,第一是阐述我所认识或是理解的云计算技术是什么;第二是Docker是什么;第三点为Docker与云计算之间的关系
1.1 什么是云计算
云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。
我理解的就是将较大的数据分为许多比他小的小块,然后用多个服务器进行运算,提高运算效率,多路并行
1.2 什么是Docker
Docker是一个用于应用程序级虚拟化的系统。虽然不同的Docker容器共享一个内核,但它们通常很少共享其他内容:文件、进程等都可以单独使用。它通常用于测试软件系统和在生产中运行它们。如果要介绍Docker,那么就必须要谈到容器这个内容,什么是容器呢,举个例子,我们买了很多本课本,为了便于整理图书,我们可以购买书架或是袋子对其进行一个分类和整理,使得将其分离开来,这边所说的书架与袋子就是容器。那么为什么我们需要程序这个容器这个概念呢
图1:基于容器的虚拟化堆栈
我们模拟一个场景,一家公司一般会有测试,技术,以及运维这几个职位,有一天程序员写好了一个程序,但是测试与运维和他的环境不同,那么在运行时,就需要重新搭建环境进行运行,这样较为耗时,并且实际运用中可能会出现很多的问题,这时候就需要我们使用容器对于配置环境以及文件进行一个打包,容器技术为打包服务栈提供了一种更为高效的方式,那么Docker能够让我们更为方便的创建和使用容器。
Docker有这样几个概念:dockerfile,image,container。我们可以简单的把image理解为可执行程序,container是运行起来的进程。写程序的话需要源代码,那么“写”image就需要dockerfile,dockerfile就是image的源代码,docker就是“编译器”。
因此我们只需要在dockerfile中指定需要哪些程序,依赖什么样的配置,之后把dockerfile交给“编译器”docker进行编译也就是docker build命令,生成的可执行程序就是image,之后就可以运行这个image了,这就是docker run命令,image运行起来后就是docker container。
图2:Motivational example of a workflow when developing a Dockerfile.
(写Dockerfile时工作流的激励示例)
1.3 Docker与云计算的关系
在Docker实验上机时,我就好奇这个问题,Docker似乎是让我们更方便的创建和使用容器,但这和云计算之间有什么关系呢?
“由Docker等技术支持的云计算和基础架构即代码(Infrastructure as Code,IaC)决定了构建和部署的软件系统数量。”这是《Developing Docker and Docker-Compose Specifications:A Developer’s Survey》里面的第一句话,随着云计算的广泛应用以及开发和运营团队高效协作的需要,Dcoker的使用越来越突出,其中Docker作为容器技术的一个广受欢迎的例子,已经成为了软件开发中的标准,并在改变完全堆栈虚拟化的范式方面发挥了重要作用。从中我们可以看出,Docker对于云计算而言,十分重要。他重要的原因就在于:Docker 容器允许开发人员将他们的应用程序与所需的依赖项(例如配置、框架、库和运行时)打包到其中,由此可以实现不同云计算之间应用程序的可移植性,提供了一个把应用程序拆分为分布式组件的方法,并且用户还可以管理和括展这些容器成为集群。这也是为什么Docker能够在云计算市场中广泛运用的原因
图3:虚拟机和Docker容器
2 Docker的安全性
2.1 环境安全
Docker目前运用极高,企业在使用Docker时,需要注意Docker的安全性,由于Docker利用容器将资源进行有效隔离。因此容器相当于与Linux OS和hypervisor有着几乎相同的安全运行管理和配置管理级别。但当涉及到安全运营与管理,以及具有保密性、完整性和可用性的通用控件的支持时,Docker可能会让你失望。
图4 Docker与Linux
当容器运行在本地系统上时,企业可以通过其安全规则确保安全性。但一旦容器运行在云端,事实就不会如此简单了。当Docker运行在云提供商平台上时,安全性变得更加复杂。你需要知道云提供商正在做什么,或许你正在与别人共享一台机器。
虽然容器没有内置的安全因素,而且像Docker这样的新兴技术很难有比较全面的安全措施,我认为这是未来一个比较大的研究方向。
2.2 配置安全
论文中将Docker安全问题的实质定位于配置安全,认为Docker的问题是很难配置一个安全的容器。虽然Docker的开发人员通过创建非常小的容器来降低攻击面,但问题在于大型企业内部在生产环境中运行Docker容器的员工需要有更多的可见性和可控性。大约90%的外部网络攻击并不是超级复杂的,攻击者多是利用了管理员的行为漏洞,比如配置错误或者未及时安装补丁。
因此,企业在部署数千或数万台容器时,能够确保这些容器都遵守企业安全策略进行配置是至关重要的事情。为解决这个问题,就需要增加Docker容器部署的实时可见性,同时实施企业制定的安全策略。
3 总结
在上机时,我不太理解docker与云计算之间的关系,在我看来,它只是一个用来创建和管理容器的工具而已,不过在写这篇文章时,我对于docker技术更加了解了,Docker 容器允许开发人员将他们的应用程序与所需的依赖项(例如配置、框架、库和运行时)打包到其中,由此可以实现不同云计算之间应用程序的可移植性,提供了一个把应用程序拆分为分布式组件的方法,并且用户还可以管理和括展这些容器成为集群。这也是为什么docker会在云计算领域使用率极高的原因。
至于安全性的方面,我认为是docker未来发展的一个重要方向,目前安全中心在新的功能中有硬件的部分,可以跨任何基础架构,允许开发和随后的升级中的数字编码签名。构建在Docker Trust框架之上用来进行镜像发布者认证,同时进行新的镜像扫描和官方漏洞检测,以便能够更好地理解容器内部是什么,也可以通过约束了主机的访问根源,并指定了系统管理员,限制了群组对于指定服务的访问这类方法来解决安全性的问题,未来,安全性的问题一定可以得到解决。
参考文献
[1] 程序员小灰,《什么是DOCKER》,知乎
[2] Moshe Zadka .“Dcoker”,DevOps in Python,DOI:10.1007/978-1-4842-4433-3_12,June 2019
[3] David Reis,Bruno Piedade,Filipe_F.Corria“Developing Docker and Docker-Compose Specifications: A Developers’ Survey”, Digital Object Identifier 10.1109/ACCESS.2021.DOI
[4] Chao-Chun Chen,Min-Hsiung Hung,Kuan-Chou Lai,Duck Lin,“Docker and Kubernetes”, DOI:10.1002/9781119739920.ch5,October 2021
[5] Sachithi Sandeshi,“Safe Cloudification of Application with Docker”,Technical July 2021