Sangil's blog

https://github.com/ChoiSangIl Admin

(Docker)Nginx와 Tomcat을 활용한 로드 밸런싱 및 무중단 배포하기 DEV / DOCKER

2020-05-18 posted by sang12


도커환경에서 Nginx를 이용해 Tomcat을 이중화 하여 무중단 배포 하는 방법을 알아 보겠습니다.

1. nginx에서 로드밸런싱을 설정해주기 위해 nginx.conf를 외부 volume으로 연동해줍니다.

-.docker-compose.yml

version: '3.7'
services:
  nginx:
    image: nginx:1.18.0
    restart: always
    volumes:
     - ./vol/nginx/nginx.conf:/etc/nginx/nginx.conf
    ports:
     - '10001:80'

2. nginx설정에서 80포트로 들어오면 지정해둔 api서버로 로드밸런싱해주게 설정합니다. 여기서 작업할때 기본으로 있는 include /etc/nginx/conf.d/*.conf; 부분을 꼭 제거해주세요. 제거하지 않으면 설정해도 기본 설정을 타게 됩니다 ^^; 한참 삽질했네요

-nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80;

        location / {
            proxy_pass http://apiserver;
        }
    }

    upstream apiserver {
       server 127.0.0.1:10002;
       server 127.0.0.1:10003;
    }
}


3. 톰캣 설정입니다. 외부 volume으로 설정해둔 부분에는 각각 MIAN1, MAIN2를 보여주는 ROOT.war파일을 위치시켰습니다

-tomcat docker-compose.yml

version: '3.8'
services:
  tomcat1:
    image: tomcat:8.5.46-jdk8-openjdk
    ports:
      - "10002:8080"
    volumes:
     - ./vol/tomcat/webapps1/:/usr/local/tomcat/webapps/
  tomcat2:
    image: tomcat:8.5.46-jdk8-openjdk
    ports:
      - "10003:8080"
    volumes:
     - ./vol/tomcat/webapps2/:/usr/local/tomcat/webapps/

80포트로 접속하면 nginx에서 tomcat 10002, 10003 포트로 로드밸런싱 하는걸 볼 수 있습니다 ^^. 배포할때는 docker-compose 파일을 tomcat1, tomcat2로 분리해서 하나하나씩 올리고내리면 무중단 배포를 할 수 있습니다.

#docker nginx 이중화
REPLY