【docker】构建nginx镜像反向代理tomcat

今天学习构建nginx镜像文件,通过portainer启动nginx和tomcat,实现用户请求的nginx所在的服务器进行转发到tomcat-ngx01或者tomcat-ngx02。效果如下图:

在这里插入图片描述
Nginx实现负载均衡是通过配置nginx.conf来实现的,nginx.conf的全部内容如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream tomcat-spring{
        server 10.108.3.134:8080;
        server 10.108.3.111:8081;
    }
    server {
        listen  0.0.0.0:80;
        server_name  _;
        location / {
            proxy_pass http://tomcat-spring;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            proxy_buffer_size 4K;
            proxy_buffers 4 32k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
        }
    }
}

可以看出,这里通过server节点的配置实现了监听80端口,“proxy_pass http://tomcat-spring;”表示对请求的处理交给了tomcat-spring,而tomcat-spring的具体配置如下:

    upstream tomcat-spring{
        server 10.108.3.134:8080;
        server 10.108.3.111:8081;
    }

即交给了url为tomcat-ngx-01:8080和tomcat-ngx-02:8081这两个server,8080代表10.108.3.134服务器上tomcat开启的8080端口,8081代表10.108.3.111服务器上tomcat开启的8081端口。

以上内容就是nginx的相关配置,接下来,我们看看如何制作nginx的镜像文件,也就是Dockerfile的具体内容:

首先,将原有系统中的nginx.conf文件删掉,需换成上述新建的nginx.conf即可,需要创建一个Dockerfile文件。具体内容如下:

#基础镜像
FROM nginx:stable

#作者
MAINTAINER spring qianchunhua@gmail.com

#定义工作目录
ENV WORK_PATH /etc/nginx

#定义conf文件名
ENV CONF_FILE_NAME nginx.conf

#删除原有配置文件
RUN rm $WORK_PATH/$CONF_FILE_NAME

#复制新的配置文件
COPY ./$CONF_FILE_NAME $WORK_PATH/

#给shell文件赋读权限
RUN chmod a+r $WORK_PATH/$CONF_FILE_NAME

接下来,打开Xshell终端,在/usr/local下创建一个文件夹,将nginx.conf和Dockerfile两个文件上传上去(注意:该目录下仅有2个文件)。

创建命令:mkdir -p /usr/local/nginx-images

在这里插入图片描述

进入此目录,执行命令行:docker build -t nginx:1.17.9 . 注意:后面的1.17.9空格后面的点“ . ”不可缺少。

执行完后,再执行docker images,就能看到新的镜像文件了,如下图。

在这里插入图片描述
现在我们有了nginx的镜像,接下来要做的就是启动nginx容器,再本服务器上和另外一个服务器上启动分别启动两个tomcat容器,来实现负载均衡:

部署tomcat的方式这里就不重复演示,网上也有很多的教程参考,但需要注意一事项,若在同一台服务器上部署两台tomcat,需要更改端口及相关配置。否则另一台tomcat容器则无法启动。

启动nginx容器有两种方式,一个是用传统的docker run命令方式,另一种我们借助docker的图形工具protainer。本实战案例将继续使用portainer:

用浏览器打开portainer页面,打开后在左侧的Stacks菜单栏新建一个stack(Add Stack),如下图:

在这里插入图片描述
在这里插入图片描述
编写完docker-compose后,点击下面的“Deploy the stack”就可以了。docker-compose.yml文件如下:

version: '3.2'
services:
  nginx:
    image: nginx:1.17.9
    ports:
      - "80:80"
    environment:
      spring.cloud.inetutils.preferred-networks: 10.10.0
    networks:
      - portainer_agent_network
    volumes: 
      - "/usr/local/nginx-images/nginx.conf:/etc/nginx/nginx.conf"
    deploy: 
      replicas: 1
      restart_policy:
        condition: on-failure
      labels: [type=basic]
      placement:
        constraints: [node.labels.type == master]
networks:
  portainer_agent_network:
    external: true

进行到这里,我们已经实现了 nginx+tomcat 实现负载均衡的效果。如果想要看到tomcat的负载效果,可以修改tomcat webapps下的ROOT里面的index.jsp便可看到效果了,访问服务器默认nginx的端口是80,这时会跳转到tomcat默认页,如下图。

在这里插入图片描述
在工作中,通常我们将war包分别部署在两个tomcat上,然后再访问“http://10.108.3.134”,这时来验证nginx已经将请求转发到了不同的tomcat上。

以上就是利用docker compose部署server负载均衡的实战,有一点问题大家可能也发现了,就是上面的案例tomcat启动都是单独来启动的,每次部署war包也会很麻烦,其实除了这种方式,我们也可以在Dockerfile中写命令将tomcat和war包复制到镜像中去,这样的话就可以通过docker的方式启动tomcat了,当然也可以尝试使用直接docker run -v 挂载目录的方式,如有兴趣的小伙伴们可以尝试下。

附件下载:基于docker的nginx.tar镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值