步骤2:CentOS7.5基于docker安装nginx

1. 查看docker已经下载的(已有的)镜像

请忽略我已下载好的nginx镜像

image.png

2. 去官方公有仓库查询nginx镜像

其中第一个就是nginx官网镜像,且STARS最多,我们这次就用这个

image.png

3. 拉取该镜像

因为我之前拉取过,所以后面的输出和第一次拉取的输出不是太一致

image.png

4. 再次查看本地镜像

此时,就看到本地有了该镜像

image.png

5. 启动一下该镜像,使用nginx服务,代理本机8080端口(测试是不是好使)

-d: 后台运行
-p: 端口映射 冒号前是本机端口,冒号后是容器端口

image.png

访问本机ip:8080 即可访问该页面,代表nginx启动成功

image.png

6.关闭容器

docker stop XXXXX(容器id前几位)

image.png

not end

至此 简单的docker安装nginx并启动算是成功了,接下来就会产生一个疑问,如果我想修改nginx的配置怎么办,我想更改nginx中的资源文件怎么办?接下来给出一个最实用的办法,就是将容器中的目录和本机目录做映射,以达到修改本机目录文件就影响到容器中的文件。

1.本机创建实例文件夹

/home文件夹下新建mutou文件夹,木头文件夹下新建nginx文件夹,nginx文件夹下新建conf.d文件夹,html文件夹,大致结构如下:

/home
    |---mutou
           |----nginx
                  |----conf.d
                  |----html

2. 在conf.d文件夹下新建default.conf文件,内容如下:

server {
    listen       80;
    server_name  localhost;
    # 原来的配置,匹配根路径
    #location / {
    #    root   /usr/share/nginx/html;
    #    index  index.html index.htm;
    #}
    # 更该配置,匹配/路径,修改index.html的名字,用于区分该配置文件替换了容器中的配置文件
    location / {
        root   /usr/share/nginx/html;
        index  index-test.html index.htm;
    }
}

3.在html中编写index-test.html,用以判断文件夹映射成功,内容如下:

<html>
  <body>
    <h2>it is html1</h2>
  </body>
</html>

4. 启动nginx(8080),映射路径

命令比较长,其实就是多加了两个参数,-v,-v的意思就是冒号前面代表本机路径,冒号后面代表容器内的路径,两个路径进行了映射,本机路径中的文件会覆盖容器内的文件。
nginx容器内的一些文件位置:
日志位置:/var/log/nginx/
配置文件位置:/etc/nginx/
项目位置:/usr/share/nginx/html

启动代码如下:

docker run -d -p 8080:80 -v /home/mutou/nginx/conf.d:/etc/nginx/conf.d  -v /home/mutou/nginx/html:/usr/share/nginx/html nginx
image.png

5. 验证

此时访问ip:8080,发现展示的不是nginx的默认页面了,而是我们新加入的页面,这样就证明我们两个-v映射的文件夹都起作用了。

image.png

6. 开始反向代理

此时静态页面网站已经部署上了,但是还是会显示一个端口8080出来,就十分不爽,怎么把端口干掉呢?而是换成XXXXX.com/demo1 或者 XXXXX.com/demo2这种效果呢?下面使用nginx的反向代理实现。

7. 增加文件夹,达到下面的效果

/home
    |---mutou
           |----nginx
                  |----conf.d
                  |----html
                  |----conf.d2

我们在conf.d2中配置另一个nginx容器的配置文件,文件内容如下:

server {
    listen       80;
    server_name  localhost;
    location /mutou {
        # 在该位置配置反向代理,将ip/mutou请求拦截,发送给8080端口,如果不是本机请使用公网ip
        proxy_pass   http://你的刚才的ip地址:8080/;
    }
}

8. 再启动一个nginx(80),专门作为反向代理映射,将本机80端口代理到nginx的80端口上,并映射两端的配置文件地址。

docker run -d -p 80:80 -v /home/mutou/nginx/conf.d2:/etc/nginx/conf.d nginx

此时 访问 ip/demo1 即可映射到了ip:8080上,成功完成反向代理。


image.png

9.拓展

当有了反向代理后,自然而然就引出了负载均衡,下面简单实现负载均衡的效果,实现该效果再添加一个nginx,所以要增加一个文件夹。

/home
    |---mutou
           |----nginx
                  |----conf.d
                  |----html
                  |----conf.d2
                  |----html3

html3中的代码如下:

<html>
  <body>
    <h2>it is html3</h2>
  </body>
</html>

10. 启动nginx(8081)

启动命令如下:

docker run -d -p 8081:80 -v /home/mutou/nginx/conf.d:/etc/nginx/conf.d  -v /home/mutou/nginx/html3:/usr/share/nginx/html nginx

11. 访问ip:8081

image.png

12.配置负载均衡,访问ip/demo1时,平均分发到8080端口和8081端口上,即it is html1it is html3间接出现。

配置负载均衡,那就是配置在第二次的nginx上,就是反向代理的nginx上,我们去conf.d2文件夹下,修改default.conf文件,如下:

upstream group1{
    server 你的刚才的ip地址:8080;
    server 你的刚才的ip地址:8081;
}

server {
    listen       80;
    server_name  localhost;
    location /demo1 {
        proxy_pass   http://group1/;
    }
}

此时,查看所有运行中的docker容器:docker ps

image.png

然后重启该容器,docker restart 容器id

13. 查看效果

访问ip/demo1,每次刷新页面,页面都会在html1和html3中进行切换,此时负载均衡的效果就实现了。

https://raw.githubusercontent.com/xicunyang/images/master/change-page.gif

14. 配置负载均衡的权重

可以使用下面的配置修改两个端口的权重(即谁被访问的概率大)

upstream group1{
    server 你的刚才的ip地址:8080 weight=1;
    server 你的刚才的ip地址:8081 weight=10;
}

server {
    listen       80;
    server_name  localhost;
    location /demo1 {
        proxy_pass   http://group1/;
    }
}

推荐阅读更多精彩内容