使用docker-compose部署Nginx 反向代理 tomcat集群


使用docker-compose部署Nginx 反向代理 tomcat集群

Nginx和tomcat都是通过dockfile制作的容器,需要的软件包自行下载,放到指定目录即可.

目录结构如下:

[root@localhost docker]# tree ./
./
├── docker-compose.yml    
├── etc                    
│   └── localtime        #用来描述本机时间,和容器保持一致
├── mysql                
│   ├── conf
│   │   └── my.cnf        #MySQL配置文件
│   └── mysqldb
├── nginx
│   ├── conf.d
│   │   └── test.conf    
│   ├── Dockerfile
│   ├── logs
│   ├── nginx-1.9.7.tar.gz
│   └── nginx.conf
├── tomcat
│   ├── apache-tomcat-8.5.51.tar.gz
│   ├── Dockerfile
│   └── jdk-8u65-linux-x64.tar.gz
└── webapps                #存放tomcat的项目
    └── ROOT
        └── index.jsp

10 directories, 11 files

[root@localhost docker]# 

按照目录结构,将配置文件放入指定目录:

1.localtime文件:

[root@localhost ~]# cp /etc/localtime /root/docker/etc/

2.my.cnf文件如下:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8
[mysql]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
basedir = /var/lib/mysql
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
character-set-server = utf8
skip-external-locking
slow-query-log = on
long_query_time = 1
slow_query_log_file = /var/lib/mysql/slow.log
log-error=/var/lib/mysql/mysql.log
pid-file=/var/lib/mysql/mysql.pid

3.nginx.conf文件如下:

user  nginx;
worker_processes  2;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {

    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /usr/local//nginx/logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    include /usr/local/nginx/conf.d/*.conf;
    
}

4.test.conf文件如下:

upstream example {
   server tomcat01:8080;
   server tomcat02:8080;
   server tomcat03:8080;
}
server {
    listen  80;
    server_name  localhost;
    access_log  logs/test_access.log main;
    error_log   logs/test_error.log ;
    location / {
      proxy_pass http://example;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
    location ~ \.(html|css|js|jpg|png|gif)$ {
       root /var/www/html;
    }
}

使用Dockerfile构建nginx镜像.

FROM centos:7
MAINTAINER saneri 838118461@qq.com
RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
#RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
ADD nginx-1.9.7.tar.gz .
WORKDIR nginx-1.9.7
RUN ./configure --prefix=/usr/local/nginx && make && make install
RUN groupadd -g 1001 nginx \
    && useradd -g 1001 -u 1001 -s /sbin/nologin -M nginx
EXPOSE 80
ENV PATH /usr/local/nginx/sbin:$PATH
CMD /bin/sh -c 'nginx -g "daemon off;"'

使用Dockerfile构建tomcat镜像

FROM centos:7
MAINTAINER saneri

ADD jdk-8u65-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.51.tar.gz /usr/local/
#设置环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_65
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.51
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#公开端口
EXPOSE 8080
#设置启动命令
CMD ["/usr/local/apache-tomcat-8.5.51/bin/catalina.sh","run"]

docker-compose.yml文件

version: '3'
services:
   nginx:
     build:
       context: ./nginx
       dockerfile: Dockerfile
     ports:
       - "80:80"
     links:
       - tomcat01:tomcat01
       - tomcat02:tomcat02
       - tomcat03:tomcat03
     volumes:
       - ./webapps:/usr/local/apache-tomcat-8.5.51/webapps/- ./nginx/logs:/usr/local/nginx/logs
       - ./etc/localtime:/etc/localtime
       - ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf:ro
       - ./nginx/conf.d/:/usr/local/nginx/conf.d/:ro
     depends_on:
       - mysql
       - tomcat01
       - tomcat02
       - tomcat03
   tomcat01:
     hostname: tomcat01
     build: ./tomcat
     links:
       -  mysql:mysql
     volumes:
       - ./webapps:/usr/local/apache-tomcat-8.5.51/webapps
       - ./etc/localtime:/etc/localtime
   tomcat02:
     hostname: tomcat02
     build: ./tomcat
     links:
       -  mysql:mysql
     volumes:
       - ./webapps:/usr/local/apache-tomcat-8.5.51/webapps
       - ./etc/localtime:/etc/localtime
   tomcat03:
     hostname: tomcat03
     build: ./tomcat
     links:
       -  mysql:mysql
     volumes:
       - ./webapps:/usr/local/apache-tomcat-8.5.51/webapps
       - ./etc/localtime:/etc/localtime
   mysql:
     hostname: mysql
     image: mysql:latest
     ports:
       - "3306:3306"
     volumes:
       - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
       - ./mysql/mysqldb:/var/lib/mysql
       - ./etc/localtime:/etc/localtime:ro
     environment:
       - MYSQL_ROOT_PASSWORD=root

项目测试页面

在webapps/ROOT目录下创建index.jsp文件,内容如下:

<%@ page language="java" contentType="text/html; charset=utf-8"  import="java.net.InetAddress"  
    pageEncoding="utf-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Nginx+Tomcat负载均衡</title>  
</head>  
<body>  
     <%  
         InetAddress addr = InetAddress.getLocalHost();  
         out.println("主机地址:"+addr.getHostAddress());  
         out.println("主机名:"+addr.getHostName());   
      %>  
      </body>  
      </html>

在docker目录下使用docker-compose启动服务

[root@localhost docker]# docker-compose up -d 
Creating docker_mysql_1 ... 
Creating docker_mysql_1 ... done
Creating docker_tomcat03_1 ... 
Creating docker_tomcat01_1 ... 
Creating docker_tomcat02_1 ... 
Creating docker_tomcat03_1
Creating docker_tomcat02_1 ... done
Creating docker_tomcat01_1 ... done
Creating docker_nginx_1 ... 
Creating docker_nginx_1 ... done

如果出现以上提示说明启动成功,查看启动状态

 

 然后访问http://192.168.10.10,在浏览器和服务器端都可以.

[root@localhost docker]# curl  http://192.168.10.10
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Nginx+Tomcat负载均衡</title>  
</head>  
<body>  
     主机地址:172.18.0.4
主机名:tomcat02
  
      </body>  
      </html>
[root@localhost docker]# curl  http://192.168.10.10
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Nginx+Tomcat负载均衡</title>  
</head>  
<body>  
     主机地址:172.18.0.3
主机名:tomcat03
  
      </body>  
      </html>
[root@localhost docker]# curl  http://192.168.10.10
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Nginx+Tomcat负载均衡</title>  
</head>  
<body>  
     主机地址:172.18.0.5
主机名:tomcat01
  
      </body>  
      </html>
[root@localhost docker]# 

我们看到,三次访问都被代理到不同的主机,nginx代理负载均衡配置成功.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM