docker-compose로 NginX와 Tomcat을 연동해보자

WEB : NginX 최신 버전 컨테이너 & Apache 최신 버전 컨테이너

WAS : Tomcat 최신 버전 컨테이너

도커 컴포즈로 NginX와 Tomcat, Apache와 Tomcat의 컨테이너를 생성하고 연동해보자.

우선 대략적인 플랜은 웹 서버는 리버스 프록시로 활용할 것이며 Tomcat 컨테이너에 Tomcat의 DocumentRoot(기본적으로 Tomcat에서는 webapps)에 있는 index.jsp 파일의 내용이 브라우저에 나타나게 할 것이다.

이렇게 하기 위해서는 각각 Apache에서는 httpd.conf, NginX에서는 nginx.conf 그리고 Tomcat에서는 index.jsp 파일의 수정본을 각각의 컨테이너의 적절한 디렉토리에 마운트 해줘야 한다.

도커 컴포즈 파일에서 volumes라는 항목을 생성하고 로컬 컴퓨터에서 작성한 파일의 위치, 그리고 컨테이너에 마운트 되어야 할 위치를 잘 매칭해주어야 한다.

어떻게 하는지 이제 실습을 해보자

1. NginX-Tomcat 연동

우선 프로젝트를 진행할 폴더를 생성하고 그 안에 docker-compose.yml 파일을 생성하자. 필자는 Apache와 NginX를 쓸 폴더를 따로 생성해 주었다.

위에 3tier_folder가 NginX와 톰캣을 연동하는 폴더, 아래 폴더가 Apache와 톰캣을 연동하는 폴더다.

Tomcat 컨테이너 생성 정보

항목항목 이름
컨테이너 이름servicestomcat000ex02
이미지imagetomcat:latest
포트 번호ports8080:8080
네트워크networksnetwork02

NginX 컨테이너 생성 정보

항목항목 이름
컨테이너 이름servicesnginx000ex02
이미지imagenginx:latest
포트 번호ports80:80
네트워크networksnetwork02

nginx.conf 파일 수정본 생성

nginx.conf 파일을 생성할 폴더를 생성해준다. 그 안에 nginx.conf 파일을 생성한다.

기본 nginx.conf 파일의 http 블록 안에 아래 부분을 추가해준다.

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat000ex02:8080;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

마찬가지로 index.jsp 파일을 생성할 폴더를 생성해준다. 그 안에 index.jsp 파일을 생성한다.

index.jsp 수정 본 생성

<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>WEB-WAS 연동 성공</title>
</head>
<body>
    <h1>WEB-WAS 연동 성공</h1>
</body>
</html>

docker-compose.yml 파일을 작성할 차례다. 각각의 컨테이너에 파일을 마운트 해주려면 volumes: 항목을 써야 된다고 앞서 언급하였다. volumes 항목을 쓰는 방법은 다음과 같다

volumes:
  - <로컬 컴퓨터의 파일위치>:<파일을 마운트할 컨테이너의 디렉토리>

docker-compose.yml 내용

version: '3'

services:
  nginx000ex02:
    image: nginx:latest
    volumes:
      - C:\Users\정순호\Documents\3tier_folder\conf\nginx.conf:/etc/nginx/nginx.conf
    ports:
      - "80:80"
    networks:
      - network02

  tomcat000ex02:
    image: tomcat:latest
    volumes:
      - C:\Users\정순호\Documents\3tier_folder\webapps\index.jsp:/usr/local/tomcat/webapps/ROOT/index.jsp
    ports:
      - "8080:8080"
    networks:
      - network02

2. docker-compose 파일을 실행하고 브라우저에서 테스트

docker-compose -f C:\Users\정순호\Documents\3tier_folder\docker-compose.yml up
docker-compose로 WEB - Tomcat 연동 성공 화면

2. Apache-Tomcat 연동

Apache 컨테이너 생성 정보

항목항목 이름
컨테이너 이름servicesapache000ex03
이미지imagehttpd:latest
포트 번호ports80:80
네트워크networksnetwork03

Tomcat 컨테이너 생성 정보

항목항목 이름
컨테이너 이름servicestomcat000ex03
이미지imagetomcat:latest
포트 번호ports80:80
네트워크networksnetwork03

NginX와 연동할 때와 마찬가지로 나는 httpd.conf 파일의 내용을 수정하여 Apache를 리버스 프록시로 사용할 것이다.

방법은 간단하다

필자는 기본 http.conf 파일의 맨 밑에 다음 코드를 추가해 주었다.

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80>
    ProxyPass / http://tomcat000ex03:8080/
    ProxyPassReverse / http://tomcat000ex03:8080/
</VirtualHost>

프록시 모듈을 추가해주고 프록시 패스를 어디로 해야되는지의 내용을 넣어준 것이다.

프록시 패스는 http://<Tomcat 컨테이너의 이름>:8080/ 으로 해주면 된다.

그리고 아까와 똑같이 도커 컴포즈 파일을 실행해주면 된다.

docker-compose -f C:\Users\정순호\Documents\3tier_v2_folder\docker-compose.yml up
docker-compose로 WEB - Tomcat 연동 성공 화면

Reference

https://jistol.github.io/docker/2017/09/19/docker-compose-tomcat-clustering

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다