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 컨테이너 생성 정보
항목 | 항목 이름 | 값 |
컨테이너 이름 | services | tomcat000ex02 |
이미지 | image | tomcat:latest |
포트 번호 | ports | 8080:8080 |
네트워크 | networks | network02 |
NginX 컨테이너 생성 정보
항목 | 항목 이름 | 값 |
컨테이너 이름 | services | nginx000ex02 |
이미지 | image | nginx:latest |
포트 번호 | ports | 80:80 |
네트워크 | networks | network02 |
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

2. Apache-Tomcat 연동
Apache 컨테이너 생성 정보
항목 | 항목 이름 | 값 |
컨테이너 이름 | services | apache000ex03 |
이미지 | image | httpd:latest |
포트 번호 | ports | 80:80 |
네트워크 | networks | network03 |
Tomcat 컨테이너 생성 정보
항목 | 항목 이름 | 값 |
컨테이너 이름 | services | tomcat000ex03 |
이미지 | image | tomcat:latest |
포트 번호 | ports | 80:80 |
네트워크 | networks | network03 |
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

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