我们将在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暂时没有发生变化: