想在容器中部署静态页面需要做一些准备工作,正常的网页服务运行都是通过80端口进行访问。
本节内容:设置容器的端口映射,开启80端口、在容器中部署Nginx服务,访问测试、关闭容器重启docker和Nginx服务。
设置容器的端口映射,开启80端口:
通过docker run [-P] [-p]命令可以开启端口映射。
-P --publish-all=true|false 默认为false 暴露容器的所有端口。
-p --publish=[] 暴露容器的部分端口,需指端口号。
例如{ docker run --name=test -P -i -t ubuntu /bin/bash } 启动一个 暴露所有端口的 的容器。
例如{ docker run --name=test -p 80 -i -t ubuntu /bin/bash } 启动一个 暴露80端口的 的容器。
例如{ docker run --name=test -P 8080:80 -i -t ubuntu /bin/bash } 启动一个 暴露80端口的 的容器,并且将容器80端口映射到宿主机8080端口。
例如{ docker run --name=test -P -i 0.0.0.0:80 -t ubuntu /bin/bash } 启动一个 指定IP,暴露80端口 的容器。
例如{ docker run --name=test -P -i 0.0.0.0:8080:80 -t ubuntu /bin/bash } 启动一个 指定IP,暴露80端口 的容器,并且将容器80端口映射到宿主机的8080端口。
在容器中部署Nginx服务,访问测试:
1.创建映射80端口的交互式容器:
使用{ docker run --name=web -p 80 -i -t ubuntu /bin/bash }命令创建。
2.安装Nginx:
{ apt-get update }
{ apt-get upgrade }
{ apt-get install -y nginx }
3.安装文本编辑器Vim:
{ apt-get install vim }
4.创建一个静态页面:
{ mkdir -p /var/www/html } 创建一个存放静态页面的文件夹。
{ cd /var/www/html } 进入到创建的文件夹中。
{ vim index.html } 使用vim创建一个index.html文件。
随便写一点HTML代码
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1> Just Test. </h1>
</body>
</html>
保存,退出。
5.修改Nginx配置文件:
{ whereis nginx } 查找一个nginx的安装目录。
{ ls /etc/nginx/sites-enabled } 查看nginx的配置文件位置。
{ vim default } 打开配置文件进行编辑,更改root的路径为刚才创建的文件夹路径。
6.运行Nginx:
{ nginx } 启动nginx服务。
{ ps -ef } 查看容器中运行的进程,确保nginx服务已经开启。
使用ctrl+P和ctrl+Q将容器设置为后台运行。
{ docker ps } 可以看到正在运行的容器列表。
{ docker port web } 可以看到web容器中的端口映射情况。
{ docker top web } 可以看到web容器中进程的运行情况。
7.测试网站访问:
7.1 { curl http://127.0.0.1:32769 } 命令可以看到之前写的HTML代码,此时在容器中部署Nginx服务正常运行。
7.2 也可以在浏览器中访问,可以看到页面正常显示。
7.3 同时也可以使用容器的IP地址进行访问。
{ docker inspect web } 查看web容器的具体信息。
{ curl http://172.17.0.2 } 此时就可以访问到了,不需要端口号,因为默认是80端口。
7.4 也可以在浏览器中访问http://172.17.0.2,可以看到页面正常显示。
关闭容器重启docker和Nginx服务:
使用{ docker stop web } 关闭容器。
使用{ docker start -i web} 再次开启容器。
在容器中使用 { ps -ef } 命令查看当前开启的进程,发现nginx服务并没有启动。
使用ctrl+P和ctrl+Q将容器设置为后台运行。
使用{ docker exec web nginx } 启动nginx服务。
使用{ docker top web } 可以看到nginx服务已经启动,此时可以用 http://172.17.0.2 或者 http://127.0.0.1:32769 可能不会再次访问到静态页面。
原因是IP地址可能改变,映射端口也可能改变,可以使用{ docker inspect web }命令再次查看IP地址和映射端口。
也就是说当容器停止后重启时,容器的IP地址和端口映射都会发生改变。