【Docker学习总结】7.Docker在容器中部署静态网站

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013517797/article/details/84188105

上一篇我们介绍了Docker守护式容器的启动方式,本篇我们来学习如何在Docker容器中部署静态网站。

这里我们将在Docker容器中使用Nginx搭建一个静态网站,通过这个部署,让大家对在前几节中学到的Docker容器知识,有进一步的熟悉和理解。

在开始部署之前,首先我们需要先了解一个概念,就是容器的端口映射。我们知道,网站服务通常是通过80端口来提供的,那么我们如何访问容器的80端口呢?这就需要在运行容器时,设置容器的端口映射。

一、指令介绍

设置容器的端口映射,可以使用run命令的两个选项(-P和-p)来实现:

run [-P][-p]

分别是一个大写的P和一个小写的p,其中,大写的P为“publish-all”的意思,可以指定为true或false,默认为false。
使用大写的P,将为容器暴露的所有端口进行映射。例如:

docker run -P -i -t centos /bin/bash

而小写的p则表示普通的“publish”动作,来指定需要映射容器的哪些端口。而指定容器端口的映射有四种模式,分别为:
(1)docker run -p 80 -i -t centos /bin/bash
该写法为“-p containerPort”,即仅指定容器的端口,在该情况下,宿主机的端口是随机映射的。
(2)docker run -p 8080:80 -i -t centos /bin/bash
该写法为“-p hostPort:containerPort”,即同时指定了宿主机的端口以及容器的端口。
(3)docker run -p 0.0.0.0:80 -i -t centos /bin/bash
该写法为“-p ip:containerPort”,即指定ip和容器的端口。
(4)docker run -p 0.0.0.0:8080:80 -i -t centos /bin/bash
该写法为“-p ip:hostPort:containerPort”,即指定ip、宿主机和容器的端口。

二、在容器中搭建Nginx服务、部署静态网页

下面我们就来看一下,如何在容器中部署Nginx服务。它需要以下步骤:
●创建映射80端口的交互式容器
●在容器中安装Nginx
●在容器中安装文本编辑器vim
●创建静态页面
●修改Nginx配置文件
●运行Nginx
●验证网站访问

首先,打开我们之前的CentOS 7虚拟机,然后运行一个带端口映射的交互容器(系统依旧为centos),命名为“web”:

进入容器中后,来安装Nginx。首先安装nginx的依赖lib库,依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel:
使用“yum install gcc-c++”安装g++、gcc,一路“y”即可:

使用“yum install pcre pcre-devel”安装pcre-devel,一路“y”即可:

使用“yum install zlib zlib-devel”安装zlib-devel,一路“y”即可:

使用“yum install openssl openssl--devel”安装openssl-devel,一路“y”即可:

然后使用“find -name nginx”查看之前是否安装过Nginx,如果有,使用“yum remove nginx”卸载。

下面来正式安装Nginx,首先进入/usr/local目录,然后使用“wget”从“http://nginx.org/download/nginx-1.7.4.tar.gz”上获取安装包:

注意:如果没有wget指令,需要先通过“yum -y install wget”安装wget指令。
下载完毕后,使用“tar -zxvf”指令解压nginx压缩包:

进入解压后的nginx-1.7.4目录中,使用--prefix参数指定nginx安装的目录(例如./configure --prefix=/usr/local/nginx,别忘记先使用“mkdir nginx”在/usr/local文件夹下创建一个名为nginx的文件夹),然后使用make、make install安装:

这里Niginx就安装好了。

然后来使用“yum install -y vim”安装“vim”,该命令就是我们常用来编辑文本文件的命令。

然后我们使用该命令来进行一些简单的静态网页的编写,这些静态网页即是将要放置在Nginx中的静态网站中的网页。
首先使用“mkdir”创建存放该静态网站的目录:

然后切换至刚刚建好的目录,使用“vim”来创建并编辑一个静态页面:

编辑内容如下:

提示:使用“i”命令进行编写,编写完毕后,使用“Esc”退出编辑模式,然后使用“:”加“wq”进行保存和退出。

接下来,就需要编辑Nginx的配置文件,来配置访问我们的静态网页资源。
打开之前nginx的安装目录,如果记不清了,也可以使用“whereis nginx”来查看nginx的安装目录:

打开其中的conf文件夹,然后找到其中的nginx.conf文件

然后使用“vim”编辑该文件:

很简单,只需要在server配置项中,将“location”中对应的root值改为刚刚我们创建的静态文件的位置。
最后依然使用“Esc”退出编辑模式,然后使用“:”加“wq”进行保存和退出。

然后切换回上一层的“sbin”文件夹,使用“./nginx”指令启动Nginx:

使用“ps -ef”查看所有进程,发现nginx已经成功启动。
这里,我们使用Ctrl+P或者Ctrl+Q来退出容器(上一节总结学习过,使用这两种方式退出,可以保持容器在后台一直运行)。

回到宿主机,我们使用docker ps命令查看正在运行的容器:

发现我们名为“web”的容器正在运行中。
之前提到过,使用“-p containerPort”指令创建的端口的交互式容器,仅指定容器的端口,在该情况下,宿主机的端口是随机映射的。这时我们可以使用“docker port web”来查看名为web的容器与宿主机进行映射的端口是哪个:

可以看到容器的80端口与宿主机的32768端口进行的映射。
当然,我们依然可以通过“docker top 容器ID/名”命令来查看容器中服务运行的情况:

可以看到,我们的Nginx服务运行良好。

此时我们可以验证网站是否可以访问,使用“curl”来访问宿主机的32768端口映射的容器法人http服务:

可以看到,成功返回了我们刚刚编写的网页内容。

当然,我们也可以在浏览器中访问该页面,首先通过ifconfig了解我们虚拟机的ip为多少:

可以看到安装的虚拟机的ip为192.168.3.129,我们在虚拟机外使用浏览器访问http://192.168.3.129:32768:

可以看到访问容器中的静态网页成功!

当然我们也可以使用容器的ip地址来访问,使用“docker inspect 容器ID/名”命令查看容器详情:

可以看到,docker容器的ip地址为172.17.0.2,我们使用curl来直接访问http://192.168.3.129(80端口无需指定):

可以看到能够访问。

至此我们完成了在一个容器中部署一个静态的网页服务。

三、有关重启的问题

我们再次使用docker ps,可以看到容器中的服务依然在运行中:

此时我们使用“docker stop 容器ID/名”来停止该容器:

当再次重启该容器的时候,我们可以发现,重新启动的容器并没有启动Nginx:

此时我们可以选择在容器中重新启动Nginx,这里和前面一样。或者选择在外面启动Nginx,首先依然使用Ctrl+P或者Ctrl+Q来退出容器,然后在外面(宿主机)启动容器,使用docker exec指令(docker exec 容器ID/名 服务命令):

可以看到我们的docker容器中的nginx服务已启动,此时需要注意的是,我们的ip映射发生了变化:

而虚拟机的ip暂时没有发生变化:

PS:学习视频中提到容器IP会发生变化,这里我重启了两次容器IP依旧没有变化,还请了解的小伙伴在回复区告诉我是为什么,感谢!

所以,这里我们这里要注意的是,当容器重启后,相关的ip映射会发生变化(因为不指定的情况下,会随机分配)。

通过本篇总结,学习了在Docker容器中通过Nginx来部署静态的网站服务,同时复习了在前几篇中学习的一些docker命令。
后面的博文将接续为大家总结有关Docker的学习记录。

参考资料:
《极客学院Docker学习》教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/84188105

猜你喜欢

转载自blog.csdn.net/u013517797/article/details/84188105