这其实是我关于粽叶那篇文章的原稿,之前写的
-----20220603,我真的好懒啊,考完试一定天天更!
摘要:近年来,我们已经看到,需要计算能力来解决日益复杂的挑战,云计算在市场中越来越重要。 Docker 目前在云计算市场的领先地位日益稳固,许多互联网公司都会选择使用 Docker 工具,但 Docker 作为一个方便创建和管理容器的工具,和云计算之间的联系是什么呢,它运行时,能否确保环境安全与部署安全性呢?本文从云计算初学者的角度,主要论述了以下问题:云计算是什么,与 Docker 之间的关系,并且解释论述 Docker 的部署安全性与环境安全。
本块内容为介绍云计算与Docker之间的关系,我将此块部分分为3块,第一是阐述我所认识或是理解的云计算技术是什么;第二是Docker是什么;第三点为Docker与云计算之间的关系
云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。
我理解的就是将较大的数据分为许多比他小的小块,然后用多个服务器进行运算,提高运算效率,多路并行
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时工作流的激励示例)
在Docker实验上机时,我就好奇这个问题,Docker似乎是让我们更方便的创建和使用容器,但这和云计算之间有什么关系呢?
“由Docker等技术支持的云计算和基础架构即代码(Infrastructure as Code,IaC)决定了构建和部署的软件系统数量。”这是《Developing Docker and Docker-Compose Specifications:A Developer’s Survey》里面的第一句话,随着云计算的广泛应用以及开发和运营团队高效协作的需要,Dcoker的使用越来越突出,其中Docker作为容器技术的一个广受欢迎的例子,已经成为了软件开发中的标准,并在改变完全堆栈虚拟化的范式方面发挥了重要作用。从中我们可以看出,Docker对于云计算而言,十分重要。他重要的原因就在于:Docker 容器允许开发人员将他们的应用程序与所需的依赖项(例如配置、框架、库和运行时)打包到其中,由此可以实现不同云计算之间应用程序的可移植性,提供了一个把应用程序拆分为分布式组件的方法,并且用户还可以管理和括展这些容器成为集群。这也是为什么Docker能够在云计算市场中广泛运用的原因

图3:虚拟机和Docker容器
Docker目前运用极高,企业在使用Docker时,需要注意Docker的安全性,由于Docker利用容器将资源进行有效隔离。因此容器相当于与Linux OS和hypervisor有着几乎相同的安全运行管理和配置管理级别。但当涉及到安全运营与管理,以及具有保密性、完整性和可用性的通用控件的支持时,Docker可能会让你失望。

图4 Docker与Linux
当容器运行在本地系统上时,企业可以通过其安全规则确保安全性。但一旦容器运行在云端,事实就不会如此简单了。当Docker运行在云提供商平台上时,安全性变得更加复杂。你需要知道云提供商正在做什么,或许你正在与别人共享一台机器。
虽然容器没有内置的安全因素,而且像Docker这样的新兴技术很难有比较全面的安全措施,我认为这是未来一个比较大的研究方向。
论文中将Docker安全问题的实质定位于配置安全,认为Docker的问题是很难配置一个安全的容器。虽然Docker的开发人员通过创建非常小的容器来降低攻击面,但问题在于大型企业内部在生产环境中运行Docker容器的员工需要有更多的可见性和可控性。大约90%的外部网络攻击并不是超级复杂的,攻击者多是利用了管理员的行为漏洞,比如配置错误或者未及时安装补丁。
因此,企业在部署数千或数万台容器时,能够确保这些容器都遵守企业安全策略进行配置是至关重要的事情。为解决这个问题,就需要增加Docker容器部署的实时可见性,同时实施企业制定的安全策略。
在上机时,我不太理解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
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
我的问题的一个例子是体育游戏。一场体育比赛有两支球队,一支主队和一支客队。我的事件记录模型如下:classTeam"Team"has_one:away_team,:class_name=>"Team"end我希望能够通过游戏访问一个团队,例如:Game.find(1).home_team但我收到一个单元化常量错误:Game::team。谁能告诉我我做错了什么?谢谢, 最佳答案 如果Gamehas_one:team那么Rails假设您的teams表有一个game_id列。不过,您想要的是games表有一个team_id列,在这种情况下
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in