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

我们将在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端口的交互式容器

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



●在容器中安装Nginx

 进入容器中后,来安装Nginx。首先安装nginx的依赖lib库

yum install gcc-c++

yum install pcre pcre-devel

yum install zlib zlib-devel

yum install openssl-devel

  正式安装Nginx

 

cd /usr/local

yum -y install wget

wget http://nginx.org/download/nginx-1.7.4.tar.gz

tar -zxvf nginx-1.7.4.tar.gz

mkdir nginx

cd nginx-1.7.4

./configure --prefix=/usr/local/nginx

yum -y install gcc automake autoconf libtool make

make 

make install





●在容器中安装文本编辑器vim

yum install -y vim


●创建静态页面

mkdir /var/www/html

cd /var/www/html

vim index.html


●修改Nginx配置文件

cd /usr/local/nginx/conf

vim nginx.conf


●运行Nginx

我们使用Ctrl+P或者Ctrl+Q来退出容器


●验证网站访问

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

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

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

 

三、有关重启的问题

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/FullStackDeveloper0/article/details/87934923