AliyunECS+Docker

简介: AliyunECS+Docker=记一次在阿里云飞天加速计划的试(bai)用(piao)ECS服务器上学习Docker等知识的历程

AliyunECS+Docker=记一次在阿里云飞天加速计划的试(bai)用(piao)ECS服务器上学习Docker等知识的历程

AliyunECS+Docker=记一次在阿里云飞天加速计划的试(bai)用(piao)ECS服务器上学习Docker等知识的历程

0x01:前言

0x02:AliyunECS

Ⅰ:申请领取流

Ⅱ.服务器的管理和使用方法

Ⅲ.远程连接

0x03:Docker

0x04:小结

0x01:前言

初入安全圈的网安专业大一小白一只,同时也是个主攻Web方向的菜鸟CTFer。这几天接到了实验室师傅们给的考核任务:学习Docker,并利用这项虚拟化技术搭建DVWA漏洞环境等一些好♂玩的东西。于是便有了这篇笔记对这几天的学习历程予以记录,以供日后回顾纪念。

搭站离不开Linux,更何况Docker只能在Linux系统上使用(依赖于已经存在并且正在运行的Linux内核环境)。之前搭过几次站都是搭在虚拟机上,装起来麻烦效果也不佳;所以这次我决定在云服务器上搭一次站试试,初次接触学习一下云服务器的部署和使用,同时也继续学习Linux的使用方法原理和各种终端命令等,积累知识和阅历。故这篇笔记不只是学习Docker,还记录了我这几天学习和搭站积累的所有知识,记载了整个历程。

在买了三年阿里云服务器的实验室同级hxd的指导和帮助下,我们通过在阿里云搜索”学生认证“和”学生机“等关键词了解到了阿里云的飞天加速计划。这个活动面向高校学生,让我们可以免费领取一台ECS云服务器试用2个周(初领)+2个月(续领)。这对我这种囊(xi)中(huan)羞(bai)涩(piao)的大学生可太友好了,有这等好事我自然是光速注册按照申请步骤完成新手预备营实验等任务,不到半个小时就顺利成功领取到了人生中第一台云服务器。

至此,万事俱备,开干!

0x02:AliyunECS

Ⅰ:申请领取流程

阿里云的注册登录非常简单,支付宝扫个码就行。之后通过搜索“学生机”或“飞天加速计划”等关键词即可找到这个活动,这里需要完成第2步的实名认证和学生认证。一开始我以为这一步可能会比较繁琐,但实际上还是只要扫个码和支付宝账号绑定一下即可,十分方便。阿里云yyds!

认证为学生后我们就有资格领取高校学生专属免费ECS了,只需要完成接下来的第3步:新手预备营即可。这一部分有两个任务,分别是场景实践:ECS云服务器新手入门场景实验和技能自测:资格考试。新手上路实验非常简单,按照实验场景左侧的步骤一步步来即可,主要是让我们熟悉一下阿里云控制台的操作方式以及云服务器的远程连接等使用方法。具体流程记录如下:

先点击创建资源生成实验环境,创建好进入远程桌面(没有自动进入就点击右侧上数第3个按钮)后打开桌面上的FireFox ESR浏览器,默认会访问子用户登录的界面并且自动填好子用户名称,直接点击下一步输入云产品资源中提供的子用户密码即可登录。这一步就是模拟我们登录自己的阿里云账号的步骤。

登录进入控制台后默认在“产品与服务“栏,直接点击中间推荐的”云服务器ECS“或点击左上角后找到这个选项点击进入即可进入云服务器ECS的控制台,点击左侧的实例然后在顶部选择对应云产品资源中的地域即可找到我们的实例(即我们的ECS云服务器),找到对应云产品资源中的实例ID的服务器点击右侧的管理即可进入它的管理页面。点击重置实例密码,然后输入实验步骤要求的Passw0rd保存密码重启服务器即可。这一步模拟的就是我们管理自己的云服务器,并且修改云服务器Linux系统的root账户密码的过程。我们在自己本地的电脑上远程连接云服务器就需要使用这组账户密码,连接成功后我们就可以以root用户权限远程使用云服务器的系统终端通过输入命令来对服务器进行管理和操作了。

重启服务器后等待服务器状态由停止中变为运行中,此时说明ECS实例重启完成已经在正常运行了,我们返回远程桌面,打开桌面的LX 终端,输入以下命令使用ssh远程连接ECS实例:

ssh root@111.133.166.199

这里的IP是云产品资源中的ECS服务器弹性IP(即我们的ECS云服务器的公网IP),回车后出现提示询问是否继续连接我们输入yes后回车,然后输入我们刚才给root用户重置的密码Passw0rd即可。注意这一步输入密码时界面是没有反应的,我们的输入不会有任何回显,正常输入完毕后直接回车即可。这一步模拟的即是我们在本地使用ssh远程登录到ECS云服务器root用户的过程。输入正确密码后提示连接成功,此时我们就可以远程使用云服务器的终端来输入命令进行操作了。到此,我们这个场景的实验就完成了。

第二个任务技能测试的资格考试更简单,只有考察云计算概念、云服务器ECS基础知识的10道选择题,限时10分钟,答对6道题即合格。真·有手就行。这两个任务都完成后我们的第3步也就完成了,接下来就可以领取我们心心念念的云服务器了!初次领取的试用时长为2个周,此外还可以续领2个月,只需要像我这样在初次领取的2个周时间内写一篇ECS使用体验投稿发表即可。

最后,在领取服务器时,服务器配置的可选项不多但还是有个别选项是我们可以自己选择的。其中硬件配置是固定的;可用区可以自选但似乎只有最新的区还有余位可以选择;再者就是地域(即服务器所在地)的选择,领取的ECS云服务器有两个地域可以选:位于华北的内蒙古乌兰察布和位于华南的广东河源。由于乌兰察布离我更近所以我最后选择了乌兰察布,理论上访问速度会快一点但影响不大,我们自己衡量按需选择即可。除了地域其它选项都可以保持默认,也可以像我一样挨个点一遍改改试试改成自己喜欢的(虽然最后除了地域好像也没啥可以改的)。

Ⅱ.服务器的管理和使用方法

与新手场景实验时相同,领取服务器后我们进入阿里云右上角的控制台再找到”云服务器ECS“选项点进去即可进入云服务器ECS的管理界面,管理我们的ECS云服务器的操作绝大多数都是在这里进行的。

点击左侧的”实例“,再在顶部选择服务器对应的地域即可找到我们的实例(即云服务器),我们可以在此对它进行一些基础的管理操作,而更多具体的操作可以点击对应的实例右侧的“管理”进入详细管理界面。比如给初次领取的崭新服务器安装操作系统,这里我选择的是Ubuntu 20.04 64位;又比如重置实例密码,和新手实验时学习的一样,点击”管理“进入服务器的详细管理界面后再点击”重置实例密码“修改为自己的密码后等待服务器重启即可。设置好密码我们就可以用自己的密码远程连接服务器的root账户了。

另外,初次领取的服务器可能没有开放http的80端口和https的443端口,如果正常搭站的话无法通过浏览器正常访问(虽然使用docker搭站可以指定别的端口,但同样没有开放)。我们需要点击控制台界面左侧下面的”安全组“找到我们的服务器点击右侧的”配置规则“,在访问规则的入方向点击”快速添加“,勾选HTTP(80)和HTTPS(443)点击确定即可。

综上,我们管理服务器需要用到的功能基本都在上述的几个界面中。比如我们可以在实例的管理界面修改实例名称和主机名Hostname等为自己喜欢的名字(实例ID是无法修改的,可能相当于服务器的身份证号);也可以让它重启、关机、启动等;需要更换操作系统镜像也是在这里操作。又比如我们使用Docker搭站会给每个网站设置很多不同的端口,那我们就需要到安全组中打开这些端口保证网站能够正常访问。除此以外,关于云服务器的管理,控制台中还有很多的界面和操作不过可能基本用不到,我们可以多点点试试自己探索,这里不多赘述。

Ⅲ.远程连接

我们可以和新手实验一样使用Linux系统终端或Windoows的cmd通过输入ssh命令来远程连接云服务器,不过这样显然不如使用专业的云服务器远程连接工具好用,这里我使用的是Xshell;另外我实验室那个hxd还给我疯狂安利他用的堡塔SSH终端,感觉确实比较好用但我懒得换了,感兴趣的xd可以试试。

打开Xshell,在弹出的会话窗口左上角点击新建会话。名称填自己喜欢的,主机填我们的云服务器IP,然后点击连接即可(感觉和我之前用虚拟机搭站连接时的操作有点出入?这未免有点简单)。然后在弹出让我们输入用户名的窗口中输入root,再在新弹出的窗口中输入我们自己设置的密码即可连接成功。在终端界面出现:

root@[你的云服务器主机名]:~#

即代表我们已经连接上了云服务器的root用户,接下来就可以敲命令对服务器进行操作了。

一开始我还担心崭新的服务器全新的Ubuntu系统可能没有安装SSH服务或者安装了但没开启,可能连不上需要在控制台先把SSH搞好。不过事实证明我多虑了,阿里云的云服务器不仅安装的系统都已经默认安装并开启了SSH服务,安全组里还默认开启了SSH的22端口,让我们可以一键直接连上。云服务器还是非常方便的,阿里云YYDS!

0x03:Docker

Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,我们可以用它把不同的货物分别规整地摆放起来,并且各种各样的货物都被集装箱标准化了,集装箱和集装箱之间相互隔离不会互相影响。那么我们就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我们就可以用一艘大船把他们都运走。

Docker就是类似的理念,它解决的问题就是不同的应用程序依赖的环境不同甚至冲突(如.net和php有冲突、Windows和Linux不可能同时共存)导致应用程序无法在一个平台上通用,需要分别隔离构造专门的运行环境的问题:

不同的应用依赖于不同的应用环境,比如.net开发的网站和php开发的网站依赖的环境就有很大区别,如果把它们都安装在一个服务器上会很麻烦,还有可能产生一些BUG或冲突,如IIS和Apache访问端口冲突。此时我们就需要隔离开.net开发的网站和php开发的网站;又比如一台电脑只能装一个系统,Windows和Linux肯定是无法同时共存在一套计算机硬件上的,那很多只能在Linux系统上使用的软件(依赖于Linux系统环境)就无法在安装了windows系统的计算机上运行,同理只支持Windows系统的软件也无法Linux系统上运行。

解决这些问题的常规思路是通过在服务器上创建不同的虚拟机来专门构造单独的运行环境放置不同的应用,但虚拟机的开销较高,手动安装和配置所需环境的过程也比较麻烦。

Docker的出现则完美解决了这些问题。与虚拟机类似,它是一项虚拟化容器技术,同样可以实现虚拟机隔离构造专门应用环境的功能,并且开销要比虚拟机小得多。这归功于它和虚拟机原理的不同,虚拟机虚拟的是一整套计算机硬件和系统,如果只是为了运行某一个程序而专门为它搭建一套环境,那么显然虚拟机虚拟出来的很多资源和功能我们根本用不上,这就会导致大量没有必要的开销;而Docker则是使用了一套接口规范,对于任何程序只要使用Docker把它们和它们所必需的环境打个包,就可以在任何安装了Docker的(Linux)系统平台跑这个”Docker包“,使任何程序都可以通过Docker跨平台通用运行,即”一次封装,到处运行“。举个例子:

一个网站,负责开发网站的开发人员使用的是Ubuntu进行开发,而网站实际是部署在CentOS上,负责管理网站的运维人员使用的都是CentOS。那么运维在把开发人员开发的Web应用从开发环境转移部署到生产环境时就会遇到一些Ubuntu转CentOS的问题,比如可能有个特殊版本的数据库只支持Ubuntu系统,不支持在CentOS系统上运行,那么在转移过程中运维就需要想办法解决这个不兼容的问题。要么动辄换数据库系统转移一下数据重新开发,要么稍微简单一点的方法就是在CentOS上装Ubuntu虚拟机把这个不兼容的Web应用放进去,吃性能还麻烦,还不一定能和CentOS上的网站形成一体,毕竟就它特殊格格不入运行中虚拟机里。

Docker的出现解决了这个问题,开发人员可以直接把调试好了的开发环境直接封装成一个Docker镜像转移给运维,运维直接在CentOS上部署这个Docker镜像即可,而且跑Docker包肯定比虚拟机部署速度快。

并且由于Docker虚拟出的是打包的应用程序和它们所必需的环境,并不像虚拟机一样虚拟到最底层的硬件并虚拟出一整套计算机,Docker虚拟出的容器是到系统进程级别的,即它虚拟出的每一套环境都是共用一套计算机底层硬件和Linux系统内核的,所以相比于动辄占用几个G内存的虚拟机,Docker的开销相当小,一般只到M级:

Docker对系统资源的利用率很高,一台服务器主机上可以同时运行数千个Docker容器。容器除了运行在其中的应用外基本不消耗额外的系统资源,这使得应用的性能很高不受影响,同时系统的开销又尽量小。传统虚拟机方式运行10个不同的应用就要启动10个虚拟机,而Docker只需要启动10个隔离的应用即可(详见后文深入学习的Docker底层原理)。

另外,虚拟机在设置安装启动后就会把我们分配的内存全部吃满来作为虚拟出的计算机的虚拟内存,而Docker所占用的内存是灵活分配的,即内存是动态占用的,负载小时不会占用多余的空闲内存,这也和后面我们还要深入学习的Docker底层原理有关。并且一个docker容器所能占用的内存大小是有上限的,一旦超过了这个上限容器就会自我销毁,不用担心使用docker时负载过高或运行一些BUG死循环等把系统资源吃满导致服务器卡顿:

虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享Linux系统内核。容器在宿主机操作系统的用户空间中以分离的进程运行(详见后文深入学习的Docker底层原理)。

在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存;使用Docker部署的话,这些内存就会利用起来。

简而言之,Docker就是一项虚拟化容器技术,我们可以将它理解为只虚拟到进程级别的轻量化虚拟机。不管什么应用程序都可以通过Docker这项技术打包它和它所依赖的环境为一个镜像,之后在任何安装了Docker的平台上我们都可以通过直接跑这个镜像来一键运行对应的程序,而且这个程序是运行在专门虚拟出的隔离环境(称为容器)中,无需担心应用程序所需环境产生的任何可能的问题。

并且,由于Docker运行的是打包的已经调试好了可以完美运行的整个应用程序及其依赖,所以用它来隔离构造专门的应用运行环境只需要简简单单的一行命令直接跑这个打包好了的镜像就行,不用像虚拟机一样费半天劲配置好装好系统还需要装环境调配置还有可能出错。如此便捷的懒人化一键操作也让Docker不止可以用来像虚拟机一样虚拟隔离专门的应用环境,也可以用来一键化安装部署使用很多别人已经调试打包好可以直接拉到自己电脑上运行的软件或web应用镜像,比如DVWA、upload-labs等CTF靶场。并且由于这些应用运行在Dokcer虚拟隔离出的容器中,所以它们有再多的漏洞也不会危害到我们的云服务器,利用这些漏洞只能打进Docker所虚拟化出的服务器Linux系统环境中。另外我们还可以使用Docker搭建动态靶机CTF靶场,比如拉一个CTFd靶场的Docker镜像,里面设置很多题目,每个题目有对应的动态靶机题目环境。做题时打开对应的靶机,服务器即对应再生成一个Docker容器,这个容器和靶场的容器在服务器中是并发的状态(不是套娃),即相当于服务器临时多开了一个网站。这里需要注意Docker跑Web应用网站的镜像可以任意指定端口映射,把我们服务器IP的端口映射到对应的容器里(详见后文学习容器的网络原理),这也就实现了在服务器上使用Docker同时部署多个网站和动态靶机,可见Docker与CTF靶场的天作之合。

显然,Docker堪称神器。它实现了应用程序的跨平台通用运行,通过打个包拉个镜像就可以随拉随用任何应用程序,几乎做到了某种程度上的应用程序大一统,兼容性无敌,实现了在平台间随意迁移应用程序并且一键完美运行。而它的诞生也可谓是时势造英雄,英雄造时势:

Docker的最底层技术是Linux的一种内核限制机制——Linux容器(LXC,Linux Containers)。LXC是Linux为了解决虚拟机的缺点而发展出的另一种虚拟化技术,是一种轻量级的容器虚拟化技术,它最大效率地隔离了进程和资源。通过cgroup、namespace等限制,LXC能够充分隔离进程组所使用的计算机(物理)资源,比如计算机硬件CPU和内存等等。

简而言之,Linux容器技术并不是模拟一个完整的操作系统,而是对某些需要模拟出专门环境的进程进行隔离,相当于给每个“被模拟”的正常进程外面套了一个保护层。对于这些运行在容器里面的进程来说它接触到的各种资源都是虚拟的与外界隔离开的,从而实现了与底层系统的隔离,而同一个容器内运行的进程之间是可以互通的。所以,正如我们前面所隐隐约约接触到的那样,Docker这项虚拟化容器技术模拟的不是操作系统,它运行的容器和宿主机都是共用一套计算机硬件、操作系统、Linux内核的。它实现虚拟化模拟隔离是通过LXC这项技术给每一个需要被模拟的进程套了个保护层来隔离,而同一个容器之间的进程似乎是相连的,最后看起来就好像运行在虚拟机上一样。

所以可见Docker虚拟化的容器确实是进程级别的,因此它相比于虚拟机才有了启动快、资源占用少等很多优势。

0x04:小结

后面还有Docker一些核心概念的学习、Docker安装和各种命令的学习历程记录、Docker运行镜像部署网站的实践、DVWA的认识和学习、Docker部署DVWA以及自制镜像的很多学习笔记。由于时间原因和最近各种事情比较多,导致我来不及整理完只能整理到这就投稿了。感兴趣的xd们可以等我的后续,这篇先整理到这把我的云服务器续领上再说(doge)。

展望未来:只能说,拜托,拥有一台云服务器超酷的好不好!哪个男孩不想拥有一台属于自己的云服务器呢?这段时间我通过管理、使用、操作自己的云服务器学习了很多知识,一个多周就把Docker学明白了,另外也掌握了很多网站服务器运维的知识,这对我学习网络安全这一领域显然有很大的帮助,也丰富了我的阅历,增长了我的见识和能力,相信这段学习经历在以后一定会起到不小的作用。现在的我相比几个月前的我,已经掌握了搭站、运维、Docker等等很多很多我当时完全整不明白的知识,能力获得了不小的提升,得到了长足的成长和进步。这段时间也通过Docker搭了很多有意思的靶场,比如DVWA、upload-labs、sqli等等等等,也把它们都打了打试了试,不得不说云服务器和Docker是真的方便好用,用起来得心应手。当然,这段时间遇到的困难也有,比如Docker的安装使用学习就费了我不少的工夫,Linux的一些系统命令和使用方法我还不大熟练(尤其是vim编辑器)。不过通过这段时间的学习,我一步步地克服了这些困难,把这些一开始觉得很难的东西学成了现在装在脑子里易如反掌的知识,可见拥有一台云服务器对于我的成长有多么显著。未来和它相伴的日子里我相信我一定能学到更多的知识,收获更大的进步。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
弹性计算 网络协议 Linux
第二章:阿里云ECS服务器(G5)安装配置docker
第二章:阿里云ECS服务器(G5)安装配置docker
368 0
|
弹性计算 NoSQL 网络协议
阿里云ECS使用docker部署redis并远程连接
本文主要介绍如何在阿里云ECS服务器上通过docker部署redis,并在springboot项目中添加redis依赖进行远程连接。
阿里云ECS使用docker部署redis并远程连接
|
29天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
100 1
|
6月前
|
弹性计算 关系型数据库 MySQL
阿里云ECS使用docker搭建mysql服务
阿里云ECS使用docker搭建mysql服务
310 1
|
6月前
|
存储 弹性计算 Linux
阿里云ECS(CentOS镜像)安装docker
阿里云ECS(CentOS镜像)安装docker
966 0
|
弹性计算 应用服务中间件 Linux
阿里云ECS服务器快速搭建Docker环境
阿里云ECS服务器快速搭建Docker环境
789 0
阿里云ECS服务器快速搭建Docker环境
|
弹性计算 Ubuntu Linux
|
弹性计算 Cloud Native 应用服务中间件
基于阿里云ECS平台的Docker环境搭建
上云就上阿里云!!!
1335 0
基于阿里云ECS平台的Docker环境搭建
|
弹性计算 NoSQL Java
阿里云ecs-docker学习
在阿里云ecs学习docker学习
阿里云ecs-docker学习
下一篇
无影云桌面