暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux运维之docker搭建apache服务器

半杰学渗透 2021-07-27
1061

————————————————


1:docker简介


“怒发冲冠,凭栏处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。”


Docker是一个开源的容器平台,使用容器镜像,可以轻松的创建虚拟化环境。Docker的容器镜像是轻量的,可执行的独立软件包,包含软件运行所需的所有内容:代码,运行时的环境,系统工具,系统库和设置。Docker与我们常用的VM功能很像,都是通过镜像来创建虚拟化环境。

Docker和VM各有优势,对于我们安全从业人员而言,相较于VM,docker创建虚拟化环境的速度更快,在linux命令行界面下操作更加简便,可轻松地将虚拟化环境打包成镜像,也可通过镜像批量化生成多个虚拟化环境。

Docker由三个简单概念组成:镜像,容器,仓库。学过语言的同学就可以很好的理解这几个概念,比如镜像就像是语言中的类一样,容器是镜像的实体,仓库是存放镜像的地方。(概念不需要死记,实际操作一遍就懂了)

  注意,这篇文章会比较长,因为后面包含一些我踩坑的经历和总结。


2:docker安装

Linux系统分为两种:
1.RedHat系列:Redhat、Centos、Fedora等。

2.Debian系列:Debian、Ubuntu等。

3.RedHat系列的包管理工具是yum,Debian系列的包管理工具是apt-get。

4.以Centos为主的yum源安装:

yum update               //更新软件源

 yum upgrade             //更新软件

 yum -y install docker-io  /安装docker

5.以Ubuntu为主的apt源安装;

apt-get update                   //更新软件源

apt-get install -y docker.io  //安装docker

6.我是用apt源进行安装的,安装后启动docker,调用docker version命令查看是否安装成功,发现最后有一个permission denied。这个是因为我们安装的时候是用的sudo安装,在这里是没有权限连接docker的服务端的,解决办法是把当前用户加入到docker组里面去。

解决方法:首先创建一个docker组,但是很可能已经有了docker组,已有就不用管了,继续下一步,把当前用户加入docker组,重启docker,最后一步,切换会话到新group,最后一步是必须的,如果不切换,组信息不会立刻生效的,最后在用docker version测试效果。

  命令代码:

1 sudo groupadd docker

2 sudo gpasswd -a ${USER} docker

3 sudo service docker restart

4 newgrp – docker

5 docker version

测试docker的功能也可以通过 docker run hello-world 来检测功能是否正常


3:搭建Apache服务器

拉取Ubuntu镜像:首先我们搜索Ubuntu,可以找到不同类型的镜像:

 拉取18.04版本的Ubuntu镜像到本地:

通过命令 docker images 可以查看下载的镜像:(可以看到下载的镜像大小是轻量级别的,只有六十多MB。)

下载镜像后,就可以根据镜像id,也就是IMAGE ID 来创建虚拟环境了,由run命令来进行创建,后接参数,下面简单介绍一下各个参数的含义:

-i:以交互模式运行容器,通常与-t同时使用;

-t:为容器重新分配一个伪输入终端,通常与-i同时使用;

-d:后台运行容器,并返回容器ID;

-p:随机端口映射,容器内部端口随机映射到主机的高端口;

//如果不使用-d参数,会直接进入到生成的容器中去。

//下图中Apache服务默认为80端口,使用-p参数将80端口映射到宿主机的8080端口,我们访问主机的8080端口就相当于访问虚拟机的80端口了。

创建虚拟环境后,先ps查看一下后台运行的容器,再使用容器的ID进入容器,注意,此时命令符显示已经进入容器,权限为root。

接下来尝试在虚拟机中安装apache,但在这里我踩了一个大坑(花了将近两个小时才弄好)。

首先,进行源更新,命令 apt-get update,却发现更新源的网络进度始终为0%,就将错误提示复制后,在网上找答案,发现了几种解决方法:

第一种:有网友提示找不到更新源,是因为dns解析错误,,要添加dns服务器到/etc/resolv.conf文件中,但当我用vim进行添加时,发现vim命令没有找到(头大),就只能用echo命令进行添加了,尝试命令如下:

  vim /etc/resolv.conf

  echo ‘xxx.xxx.xxx.xxx’ >>/etc/resolv.conf    /*注意 ‘>’表示覆盖写,‘>>’表示追写;‘xxx.xxx.xxx.xxx’表示dns服务器地址。修改了过后,还是连接不到更新源。 */

第二种:有网友提示更新源连接不到,是更新源的问题,可以通过更换新的更新源进行操作,就是添加更新源到 /etc/apt/sources.list  ,还是通过echo进行添加(vim无法使用),常见更新源如下,也可以自己去网上找:

  deb http://mirrors.aliyun.com/ubuntu/ raring main restricted universe multiverse

  deb http://mirrors.aliyun.com/ubuntu/ raring-security main restricted universe multiverse

  deb http://mirrors.aliyun.com/ubuntu/ raring-updates main restricted universe multiverse

  deb http://mirrors.aliyun.com/ubuntu/ raring-proposed main restricted universe multiverse

  deb http://mirrors.aliyun.com/ubuntu/ raring-backports main restricted universe multiverse

遗憾的是,换了更新源后,还是连接不到,无法进行apt源的更新。

第三种:网上大多都是前两种方法之一,后来,我去csdn上看了看,发现还有重启一下docker就行了的,命令是 systemctl restart docker,但在我这里还是不行,于是我看到了另一种说法:前面,我们提到过,docker是一种类VM的软件,但它是轻量级的,这也说明,它也具有VM的一些属性,也就是它的容器其实是有ip的(神不神奇),通过docker inspect ID即可看到相应容器的ip:

我们重点关注容器的ip和gw(网关),那么同VM一样,docker里的容器要联网,就必须通过宿主机,那么此时docker里的容器应该和宿主机是能ping通的,但不幸的是,我ping了一下,发现二者并不想通。(终于找到了原因所在),于是我在宿主机上添加了docker里容器的静态路由,最后再次进入docker里的容器,成功完成更新。(退出docker用 exit,重新进入docker用exec。)

注意:如果添加静态路由后进入,还是不行,可以先重启一下docker,命令 systemctl restart docker ,重启后重新构建虚拟环境(run命令),最后进行更新,即可成功。

  小结:在这次长达两个多小时的踩坑过程中,说一下我的感受:踩坑是学习必然的途径,在这次踩坑中我学到了很多,比如说一些重要文件是干什么用的,dns配置文件,更新源配置文件,vim命令不可用时,echo可以代替部分功能……对docker也了解的更深了,其命令的掌握程度也更熟练了,最后说一下,踩坑确实对人的身体和心灵都是一种折磨。

  接下来的任务就比较简单了:执行搭建apache2+php7的环境:

1 apt-get update  //更新软件列表

2 apt-get install apache2  //安装apache2

3 apt-get install php7.0  //安装php7

4 apt-get install libapache2-mod-php  //将php与apache关联

5 service apache2 start  //启动apache2服务

  成功完成后,访问宿主机8080端口,通过地址转换到Ubuntu的80端口,打开首页,apache服务正常:


在Apache的/var/www/html 下创建test.php文件,进行再次测试:

搭建环境成功,最后,我们在进行生成镜像的操作。

4:生成镜像

我们使用镜像生成容器后,对容器进行的操作并不会影响到镜像,因此我们可以随时用一个镜像生成多个“干净”的虚拟容器。

如果需要保存容器的配置,需要让容器反向生成镜(先stop掉,再进行封装)。

  命令:

 docker stop ID

docker commit -a “Monster” -m “test” ID apache-test:v1

  参数说明:

-a:提交的镜像作者。

-c:使用dockerfile指令创建镜像。

-m:提交时的说明文字。

使用我们提交的镜像后,就可以直接生成多个已配置好的虚拟环境了。(坑:生成镜像时最好加-d参数,这样当我们退出容器时,容器还存在后台,否则退出后,容器就没了。上面生成容器时,还有个坑,没有先stop容器。)

5:docker总结

1 启动 docker service docker start

2 下载镜像 docker pull ‘xxx’

3 查看下载的镜像 docker images

4 查找镜像 docker search ‘xxx’

5 构建容器 docker run -it -d -p port:port ID

6 启动容器 docker start ID

7 停止容器 docker stop ID

8 删除容器 docker rm ID

9 查看运行容器 docker ps -a

10 进入容器 docker exec -it ID bash

    //注意,作为一个合格的程序员,排序时牢记从0开始计数,我这里是一个错误示范。


“莫等闲、白了少年头,空悲切。靖康耻,犹未雪。臣子恨,何时灭。驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。”





1

END

1






文章转载自半杰学渗透,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论