docker-compose로 NginX와 Tomcat을 연동하는 방법을 정리한다. 웹 서버(NginX·Apache)를 리버스 프록시로 두고, Tomcat의 DocumentRoot(기본값 webapps)에 있는 index.jsp 내용이 브라우저에 표시되도록 구성한다. 이를 위해 각 서버의 설정 파일(nginx.conf·httpd.conf)과 index.jsp 수정본을 docker-compose의 volumes로 컨테이너에 마운트한다.
리버스 프록시로 활용할 WEB 서버와 WAS는 다음과 같다.
- WEB: NginX 최신 버전 컨테이너 / Apache 최신 버전 컨테이너
- WAS: Tomcat 최신 버전 컨테이너
핵심은 docker-compose 파일에 volumes 항목을 만들어, 로컬에서 작성한 파일의 위치와 컨테이너에 마운트할 위치를 정확히 매칭하는 것이다. 그럼 실습을 시작해 보자.
NginX-Tomcat 연동
먼저 프로젝트를 진행할 폴더를 만들고 그 안에 docker-compose.yml 파일을 생성한다. 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 블록을 추가해 Tomcat으로 프록시되도록 한다.
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:
- <로컬 컴퓨터의 파일위치>:<파일을 마운트할 컨테이너의 디렉토리>
이를 적용한 docker-compose.yml 전체 내용이다.
version: '3'
services:
nginx000ex02:
image: nginx:latest
volumes:
- C:Users정순호Documents3tier_folderconfnginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
networks:
- network02
tomcat000ex02:
image: tomcat:latest
volumes:
- C:Users정순호Documents3tier_folderwebappsindex.jsp:/usr/local/tomcat/webapps/ROOT/index.jsp
ports:
- "8080:8080"
networks:
- network02
실행 및 브라우저 테스트
docker-compose -f C:Users정순호Documents3tier_folderdocker-compose.yml up

Apache-Tomcat 연동
같은 원리를 Apache에도 적용할 수 있다. 컨테이너 생성 정보는 다음과 같다.
| 항목 | 항목 이름 | 값 |
| 컨테이너 이름 | services | apache000ex03 |
| 이미지 | image | httpd:latest |
| 포트 번호 | ports | 80:80 |
| 네트워크 | networks | network03 |
| 항목 | 항목 이름 | 값 |
| 컨테이너 이름 | services | tomcat000ex03 |
| 이미지 | image | tomcat:latest |
| 포트 번호 | ports | 80:80 |
| 네트워크 | networks | network03 |
NginX 때와 마찬가지로 httpd.conf를 수정해 Apache를 리버스 프록시로 사용한다. 기본 httpd.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 파일을 실행한다.
docker-compose -f C:Users정순호Documents3tier_v2_folderdocker-compose.yml up

정리
docker-compose의 volumes로 설정 파일을 마운트하고 웹 서버를 리버스 프록시로 두면, NginX·Apache 어느 쪽이든 Tomcat과 손쉽게 연동된다. 여기에 DB까지 더해 3-Tier를 완성하려면 docker-compose로 Tomcat-MariaDB 연동으로 이어서 진행하면 된다.
참고 자료
https://jistol.github.io/docker/2017/09/19/docker-compose-tomcat-clustering



💬 댓글 0