实验目的:

前一帖简单的实验了一下Docker的安装,过程其实也不难,按照官网指导做,基本上都能成功,唯一的困难可能就是英文的阅读,很多人面对英文时“脑壳疼”,我当然也一样,本身就是个“英语侏儒”,但看在对技术本身的热情和兴趣上,还是能够耐着性子“啃”官方的英文文档的。

安装完Docker,还是想再进一步玩一玩,比如在Docker上安装别的应用,看看Docker到底比虚拟机好在哪些地方。

好奇心仍然驱动着我……

那就试试在Docker上安装Nginx和Apache Server吧,都是两个Web服务,验证也很简单,通过浏览器键入IP地址+端口即可。




docker的安装实训报告 安装docker项目实验报告_docker安装nginx


docker的安装实训报告 安装docker项目实验报告_虚拟机安装docker_02


docker的安装实训报告 安装docker项目实验报告_docker的安装实训报告_03


实验准备:

1)Docker 18,具体安装过程可参考前一帖:https://www.toutiao.com/i6858063018522214915/

2)实验设备,同样我还是选择云主机,假设这个云主机就是一台物理服务器,只是安装了CentOS 7.5,那么Docker就是跑在这台“物理机”上,事实上就是这么使用的。(因为考虑到成本,所以还是选择了云主机,毕竟一台物理服务器要几大万呢,囊中羞涩。),当然,也可以在自己的电脑上安装VMware WorkStation或者Oracle VirtualBox等软件,通过虚拟化软件来创建本地虚拟机,只不过自行创建的虚拟机需要手动配置网络、系统参数等,使用云主机省了这方面的麻烦,同时也更能接近实际使用环境,毕竟要通过公网访问远程的资源池。

实验过程:

在前一帖中,设置了Docker镜像加速,即手动创建/etc/docker/daemon.json这个文档,并且在文档中添加如下代码:

{

"registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]

}

设置完成后,再通过“docker pull 具体镜像”就能够很快下载镜像文件了。

实验一:安装Nginx

步骤一:启动docker,查看Nginx镜像,然后通过docker pull 命令下载nginx镜像文件。

systemctl start docker //启动docker服务

docker search nginx //在镜像仓库中查看docker官方的nginx镜像

docker pull nginx //从镜像仓库中拉取nginx镜像

docker run --name mynginx -p 8000:80 -d nginx //运行nginx,将docker的8000端口映射到nginx的80端口上,同时自定义一个名字mynginx,便于后续操作管理

docker ps //查看当前运行的docker


docker的安装实训报告 安装docker项目实验报告_虚拟机安装docker_04


步骤二:进入nginx这个docker内部,看看配置文件,

docker exec -it mynginx /bin/bash

进入nginx这个docker内部,这里可以使用run时自定义的名字,也可以通过container id操作,为了方便肯定选择自定义名字

注意:我们进入nginx这个docker内部后,显示的当前路径就有区别了,见图中红线部分,显示的是当前docker的id。当然,当前的根目录自然也是nginx docker自己的根目录,相关文件也是自己的,根本看不见其它的文件,也就是docker的隔离特性。


docker的安装实训报告 安装docker项目实验报告_docker的安装实训报告_05


步骤三:编辑配置文件。编辑文件,自然会想到vi或者vim吧,当我们自信的键入命令后,会意外的发现,系统竟然不识别!!!上网搜了下,需要用两个命令来安装。

apt-get update

apt-get install vim

vim /etc/nginx/conf.d/default.conf


docker的安装实训报告 安装docker项目实验报告_虚拟机安装docker_06


注意:使用vim时,退出的时候可能会跟平常使用的有些差异,自己还是捣鼓了一小会儿呢。平时使用vim编辑后,先按Esc健退出insert模式,然后按Shift+Q健,输入q或wq退出,但在这里我没成功,后来是通过按Shift+:组合健,然后输入q或者wq才能退出。


docker的安装实训报告 安装docker项目实验报告_docker_07


docker的安装实训报告 安装docker项目实验报告_docker_08


上图就是我们熟悉的server和location语句块了,可以修改映射端口,可以添加location语句块用于页面的匹配转发等等。

如果要退出当前nginx这个docker,可以使用exit命令。

步骤四:在浏览器中输入公网IP+端口,这里的端口是安装docker的服务器(云主机)端口,也就是8000,注意在安全组里放通,否则通过本地电脑的浏览器无法访问页面的。


docker的安装实训报告 安装docker项目实验报告_docker安装nginx_09


实验二:安装Apache httpd

步骤一:从镜像仓库中拉取httpd的镜像,然后运行httpd容器。

docker pull httpd //从镜像仓库中拉取httpd镜像

docker run --name myhttpd -p 8091:80 -d httpd //运行httpd,将docker的8091端口映射到httpd的80端口上,同时自定义一个名字myhttpd,便于后续操作管理

docker ps //查看当前运行的docker


docker的安装实训报告 安装docker项目实验报告_docker安装nginx_10


步骤二:进入httpd容器,查看配置文件

docker exec -it myhttpd /bin/bash


docker的安装实训报告 安装docker项目实验报告_docker 安装nginx_11


步骤三:编辑配置文件,httpd.conf。同样要安装vim编辑工具,否则无法识别命令。

上图就是我们熟悉的修改监听端口的代码,可以根据实际需要进行修改保存。

注意:退出vim编辑时,按Shift+:组合健,然后输入q或者wq退出。

要退出httpd这个容器,可以在当前命令行键入exit退出。


docker的安装实训报告 安装docker项目实验报告_虚拟机安装docker_12


步骤四:验证试验,我们在浏览器中键入公网IP+端口号,如果能够返回成功页面,说明httpd服务安装成功。前面run的时候将当前服务器(云主机)的8091端口映射到httpd容器的80端口,注意在云主机的安全组里放通8091端口。


docker的安装实训报告 安装docker项目实验报告_虚拟机安装docker_13


实验总结:

虚拟机与容器docker的对比:

1)虚拟机安装占用资源多,这个已经是公认的且证据确凿,一个精简版的CentOS 7.5大概需要3GB容量,外加Nginx或者Apache server的300MB安装文件;但对于docker容器来说,仅仅是从镜像仓库pull下来的Nginx或者Apache server的镜像文件,也就300MB左右。这还只是存储资源,实际运行的内存、CPU资源,虚拟机同样要比docker容器大的多,作为后台服务器,对于资源使用效率要求还是非常高的。

2)虚拟机启动时间比docker容器长很多,标准CentOS 7.5的虚拟机启动后,如果要安装Nginx,便要配置yum仓库,同时使用yum install nginx安装,安装完成后我们制作一个系统镜像,这个镜像文件就是CentOS 7.5+nginx,使用这个自定义镜像文件创建一个虚拟机至少需要几十秒,而docker容器仅需要一两秒,也就是运行一下docker run -p 8000:80 -d nginx。当然yum install nginx和docker pull nginx这两个操作都是安装nginx的,算是启动前准备,具体耗时时间是取决于镜像下载带宽和个人操作熟练程度,没有计算在启动服务的时间内。

3)资源隔离,虚拟机的隔离是操作系统级的,即通过启动不同的虚拟机来进行资源隔离,比如我们要想让Nginx和Apache server两个服务的资源隔离,需要安装在不同的虚拟机上,否则安装Nginx的虚拟机可以查看和操作Apache server的配置文件和进程。Docker容器的隔离是进程级别的,这点一直是被“诟病”的关键点,相信随着技术的不断发展,这个被“诟病”的关键点将不复存在。通过docker exec命令进入Nginx容器后,就只能看到Nginx的所有文件,而无法看到,更别说操作其它文件和应用了。

4)资源管理,虚拟机本地管理有VMware workstation、Oracle VirtualBox等,docker容器有docker UI、shipyard、portainer等(详细的操作配置可在网上查找),当然也可以通过docker exec命令行模式,各有千秋吧,相对来说呢,虚拟机发展这么多年,已经非常成熟,相应的管理工具也肯定很成熟,商用性很高。对于集群、分布式操作,虚拟机对应的有OpenStack等云操作系统,docker容器有Kubernates、Mesos等,随着云原生技术的飞速发展,大有一种要“颠覆”传统虚拟化技术的趋势,所以docker和K8S很可能引领着下一个云计算发展的潮流。