在容器中部署静态网站

时间:2021-10-10 21:47:20

利用docker技术在容器中使用nginx部署一个静态网站。


容器的端口映射


在使用run的时候指定-p或-P来进行端口映射:

-P:将为容器暴露的所有端口进行映射
    eg:docker run -P -it centos /bin/bash

-p:指定映射哪些容器的端口
    eg:1、只指定容器端口(宿主机端口随机映射)
        docker run -p 80 -it centos /bin/bash

        2、同时指定宿主机端口和容器端口
        docker run -p 8080:80 -it centos /bin/bash

        3、指定ip和容器的端口
        docker run -p 0.0.0.0:80 -it centos /bin/bash

        4、指定ip:宿主机端口:容器端口
        docker run -p 0.0.0.0:8080:80 -it centos /bin/bash

部署服务


步骤

  1. 创建映射80端口的交互式容器
  2. 安装nginx
  3. 安装vim
  4. 创建静态页面
  5. 修改配置文件
  6. 运行nginx
  7. 验证访问

搭建

创建一个映射80端口的交互式容器:

docker run -p 80 --name web -it centos /bin/bash

配置epel源:

[root@4168ac0dfa0f /]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -P /etc/yum.repos.d

[root@4168ac0dfa0f /]# rpm -ivh /etc/yum.repos.d/epel-release-latest-7.noarch.rpm

[root@4168ac0dfa0f /]# yum clean all

安装nginx,vim

[root@4168ac0dfa0f /]# yum install -y nginx vim

建立存放页面的目录和页面:

[root@4168ac0dfa0f /]# mkdir -p /var/www/html

[root@4168ac0dfa0f /]# cd /var/www/html/

[root@4168ac0dfa0f /]# vim index.html
    <html>
    <head>
        <title>Test docker-ng</title>
    </head>
    <body>
        <h1>IF you see this, you success run a nginx in docker!</h1>
    </body>
    </html>

编辑nginx配置文件:

[root@4168ac0dfa0f html]# vim /etc/nginx/nginx.conf
    修改root  /var/www/html;

运行nginx:

[root@4168ac0dfa0f html]# nginx

[root@4168ac0dfa0f html]# ps -ef | grep nginx

使用CTRL+P CTRL+Q让容器运行在后台

在物理机中查看容器:

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
4168ac0dfa0f        centos              "/bin/bash"         12 minutes ago      Up 12 minutes       0.0.0.0:32768->80/tcp   web

[root@docker ~]# docker port web
80/tcp -> 0.0.0.0:32768

可以看到,容器的80端口映射到主机的32768端口上

验证网站是否可访问:

命令行中访问:
[root@docker ~]# curl 127.0.0.1:32768

在容器中部署静态网站

也可以在浏览器中访问:
在容器中部署静态网站

使用容器的IP地址访问

使用inspect参数查看docker容器的ip:

[root@docker ~]# docker inspect 4168ac0dfa0f

在容器中部署静态网站

用curl访问:

[root@docker ~]# curl 172.17.0.2

在容器中部署静态网站

关闭、重启服务

现在web容器一直后台运行:

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
4168ac0dfa0f        centos              "/bin/bash"         35 minutes ago      Up 35 minutes       0.0.0.0:32768->80/tcp   web

然后关闭容器后重新运行容器:

[root@docker ~]# docker stop web
web

[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

[root@docker ~]# docker start -i web

[root@4168ac0dfa0f /]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 12:29 ?        00:00:00 /bin/bash
root         15      1  0 12:29 ?        00:00:00 ps -ef

发现nginx并没有在重启容器后自动运行

用docker的exec参数在容器外启动nginx:

[root@docker ~]# docker exec web nginx

[root@docker ~]# docker top web
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4986                4973                0                   20:29               pts/1               00:00:00            /bin/bash
root                5044                1                   0                   20:31               ?                   00:00:00            nginx: master process nginx
polkitd             5045                5044                0                   20:31               ?                   00:00:00            nginx: worker process

可以看到nginx已经启动了

现在重新访问,又正常了:

[root@docker ~]# curl 127.0.0.1:32769
<html>
<head>
    <title>Test docker-ng</title>
</head>
<body>
    <h1>IF you see this, you success run a nginx in docker!</h1>
</body>
</html>

注意,容器停止后重新运行,映射的端口和IP地址可能会发生变化!