当前位置: 首页 > Linux

Docker搭建靶场的利器

时间:2023-04-06 05:06:20 Linux

最近在看《李宗仁回忆录》。我断断续续地看了一个星期。因为白天没时间,只能晚上抽时间。浪费了很多学习时间,很惭愧。我一直对历史很感兴趣,但是李宗仁的回忆录真的写的很好。每天晚上回来,都想打开书看一会,渐渐忘却了自己。这本书最吸引我的是它刷新了我对民国历史的认识。在此之前,我了解到李宗仁是领导台儿庄战役、反对蒋介石的桂系首领。仔细读完这本书,我发现李石是一代英雄,与我想象中的真不一样,从他的处事风格上,我从心底里敬佩这位传奇人物。小时候家境贫寒,弃学参军,从排长做起,受了伤,一步步走(杀了上级)。奋斗史。会合广东后,投身北伐。他指挥的第七军被誉为“钢铁军”,奠定了南京国民政府的基础。龙潭之战奠定了全国统一的基础。后经武汉军变、江桂之战、中原之战未毁。抗日战争结束后,有许多光辉事迹。本书揭露了北伐战争、国民党内乱、蒋介石的为人等诸多史实。以前我总奇怪为什么后人很少骂汪精卫这样的大汉奸。我这才知道,王在国民党的地位如此之高,他投了票后,并没有做出对国家、民族不利的事情。虽然历史不能完全可信,读此书犹如读小说一般享受,但李宗仁的经历犹如儿时的梦想,只是一个是真实的,另一个从未迈出第一步。看完之后,只能用赞叹不已来形容了。最近公司开始全面使用Docker搭建目标机环境。以前都是用Ubuntu虚拟机搭建环境,安装必要的软件mysql、php和apache(以php服务器为例),然后整个虚拟机生成一个几千兆的.vof虚拟机文件用作服务器。每次需要搭建新的环境,都要先复制文件,然后把phpweb文件复制到/var/www/html。整个过程可以说是费时费力,而且还占了很大的空间。很早以前,公司里有人开始研究docker,最近打算用docker来搭建环境。而且最近在写jQuery源码项目,觉得没什么好写的,就抽空记录下这几周使用docker的心得吧。欢迎来面。为什么要用docker在github上开源?它是一个支持创建轻量级和便携式容器的引擎。用了之后感觉很像虚拟机,比虚拟机轻很多。docker最经典的一句话:buildonce,configureonceandrunanywhere。可见docker的强大。比如现在的阿里云容器,用户可以在上面购买web服务,然后docker可以一键部署生成应用。可见docker已经取代了虚拟云主机。毕竟对于大多数服务商来说,他们只希望web服务能够稳定。它运行安全,无论它是在容器中还是在虚拟机中运行。在我的理解里,docker是给运维人员的,给开发人员的,怎么开发,怎么开发,只是跑在不同的平台上。那么,docker的优势在哪里呢?支持多平台,目前支持主要操作系统:window、linux和mac,docker产品概览。就我使用它而言,它比VM小,但比VM快。在构建应用程序的过程中,docker比虚拟机快很多,而且每个应用程序都依赖image,image实际上运行在一个容器中,image和container是分离的,在构建多个应用程序时非常方便。docker虽然是容器,但是是通过命令行来管理的,也参考了git的操作,比如一些常见的commit、push、pull命令。我无法验证CPU/内存的低消耗,但我同意构建一次并在任何地方运行。比如公司现在需要搭建一个php环境。它只需要搭建一个php+mysql+apache的环境就可以搭建任何web应用。docker的使用docker的安装可以参考dockerdocs,里面详细介绍了支持的操作系统的安装。使用docker的第一步是拉取镜像。docker镜像是dockerruntime的模板。比如我要运行一个mysql服务,我必须有一个安装了mysql的基本ubuntu系统。这是运行时的基础镜像,最基础的镜像就是一个纯ubuntu系统dockerhububuntu。第一步是拉取一个简单的docker镜像。Docker提供了一个类似于github的镜像官方网站,https://hub.docker.com/,用户可以拉取一些基础的和流行的镜像。当然,dockerhub中最受欢迎的镜像是关注度最高的ubuntu镜像。用户对基本的ubuntu镜像进行改造,衍生出各种镜像文件。dockerpullubuntu:14.04以上是最基本的dockerpull命令,ubuntu:14.04表示ubuntu官方镜像版本14.04,也可以拉取最新版本,例如:dockerpullubuntu:latest或者pull16.04:dockerpullubuntu:16.04。这是从dockerhub官网获取镜像。速度很慢。幸运的是,中国有图像加速器。具体配置请参考本文,或通过本页面注册www.daocloud.io获取图片加速。加速后,你会发现速度很快。这时候可以通过dockerimages查看当前已有的镜像。要运行,使用以下命令:dockerrun-i-tubuntu:14.04/bin/bash//-i表示输出在标准控制台中//-t表示分配一个tty终端设备执行此命令后,currentcommand行下面会进入ubuntu:14.04的命令行,和ssh服务器一样,exit命令退出。ubuntu:14.04是镜像名称和版本,最后是要执行的命令,这里是进入命令行,所以执行/bin/bash文件。因为构建是自动的,所以大多数情况下(后面会介绍Dockerfile)提前写一个bash文件,启动并运行bash文件,例如:dockerrun-dubuntu:14.04/bin/bash/run.sh//-d表示后台运行容器dockerps用于查看当前运行的容器,dockerps-a显示所有容器,dockerstop/start/restart{container_id|containername}可以停止/启动/重启正在运行或已停止的容器。总之,记住一句话,图片是模板,操作靠容器。有时为了管理方便,需要给容器命名:dockerrun-dubuntu:14.04/bin/bash/run.sh--name=test如果运行时忘记或需要修改名称,可以使用以下命令,因为即使你忘记命名,docker容器也会使用系统随机分配的名称:dockerrename{old_name}{new_name}我们可以将基本的ubuntu镜像升级为mysql服务器,这是通过commitcommand:host$dockerrun-i-tubuntu:14.04/bin/bash//enterubuntu:14.04shell//命令简化root$sudoapt-getupdateroot$sudoapt-getinstallmysql-serverroot$exithost$dockercommit-m"installmysql_server"{container_id}ubuntu:mysqlhost$dockerimages会发现多了一个名为ubuntu:mysql的镜像文件,也就是commit后的镜像文件。这时候你可以通过push命令将它们推送到服务器上供其他人使用。Docker也使用了端口映射、文件夹映射等,比如mysql服务器。启动后实际上会在容器中开启3306端口,通过-p即可将它们映射到本地3306端口:dockerrun-d-p3306:3306-p80:80-v/web/:/var/www/htmlubuntu:apache_server/bin/bash/run.sh-v将host目录下的/web映射到/var/www/html。这是一个容器。如果我们需要启动第二个web应用程序,我们只需要创建另一个容器。所谓buildonce,runeverywhere。有时对于数据库服务和apache服务,他们需要运行在两个不同的容器中,他们需要被链接起来。前面在Dockerfile中提到,一键部署一键运行,但是我们看到的只是一键运行,一键部署怎么设置呢?通过docker提供的dockerbuild命令。有两种方法可以创建新图像。前面介绍了commit方法,但是commit是针对容器的。构建它需要一个完整的容器,过程有点繁琐。dockerbuild需要一个Dockerfile文件,如果该文件在当前目录下:dockerbuild-tubuntu:mysql.-t参数表示给镜像添加一个tag,Dockerfile也可以指定位置,替换.使用指定的Dockerfile,即Can。一个Dockerfile大致如下:#表示哪个镜像来自ubuntu:14:04#MAINTAINERauthor#ENV指定docker容器的环境变量ENVDEBIAN_FRONTENDnoninteractive#RUN表示执行bash命令#installpackageRUNapt-getupdate&&\apt-get-yinstallsupervisorgitapache2libapache2-mod-php5mysql-serverphp5-mysqlpwgenphp-apcphp5-mcrypt&&\echo"ServerNamelocalhost">>/etc/apache2/apache2.conf#ADD表示将本地文件添加到容器目录ADDstart-apache2.sh/start-apache2.shADDstart-mysqld.sh/start-mysqld.shADDrun.sh/run.shRUNchmod755/*.shADDmy.cnf/etc/mysql/conf.d/my.cnf添加supervisord-apache2.conf/etc/supervisor/conf.d/supervisord-apache2.conf添加supervisord-mysqld.conf/etc/supervisor/conf.d/supervisord-mysqld.conf#删除数据库文件RUNrm-rf/var/lib/mysql/*#添加数据库配置文件ADDcreate_mysql_admin_user.sh/create_mysql_admin_user.shRUNchmod755/*.sh#cloneappfileRUNgitclonehttps://github.com/fermayo/hello-world-lamp.git/var/www/html#环境变量配置phpENVPHP_UPLOAD_MAX_FILESIZE10MENVPHP_POST_MAX_SIZE10M#添加共享挂载,同-v命令VOLUME["/etc/mysql","/var/lib/mysql"]#暴露端口EXPOSE803306#添加默认执行bash(cmd)CMD["/run.sh"]里面有个坑。因为这个14.04的镜像来自于官方,所以apt-get的来源是美国主机,速度很慢。建议先更新ubuntu源。修改,然后执行build命令,切记。上述Dockerfile文件来自github上的一个php+mysql+apache环境搭建项目,lamp。更多Dockerfile命令请参考如何使用Dockerfile构建镜像或Docker入门教程(三)Dockerfile。总结其实docker的使用非常简单,不需要看它的源码。就是一些简单的命令,网上有很多教程。短时间学会docker没问题,关键问题是:为什么要用docker?学习码头工人?docker能给你带来什么便利?因为我的公司需要掌握docker,所以我花了一些时间才开始接触docker。基本的命令我都懂,确实带来了很大的方便。但是入门总是入门,在使用过程中会遇到一些问题,比如容器root权限的问题;docker和虚拟机一样安全吗?docker的性能和VM的性能和直接在本地运行应用的性能有什么不同?共勉!参考docker中文Docker入门教程Docker容器入门如何使用Dockerfile构建镜像欢迎来到我的博客讨论。