docker-compose로 NginX – Tomcat 연동

docker-compose로 NginX - Tomcat 연동

목차

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용 폴더를 따로 만들어 두었다.

NginX-Tomcat 연동 프로젝트 폴더 구성

컨테이너 생성 정보

Tomcat 컨테이너 생성 정보다.

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

NginX 컨테이너 생성 정보다.

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

nginx.conf 수정본 생성

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를 생성한다.

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
docker-compose로 NginX - Tomcat 연동 성공 화면

Apache-Tomcat 연동

같은 원리를 Apache에도 적용할 수 있다. 컨테이너 생성 정보는 다음과 같다.

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

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로 Apache - Tomcat 연동 성공 화면

정리

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

💬 댓글을 남기려면?
첫 댓글을 남겨보세요 ✨

이 콘텐츠가 도움이 됐나요?

누스쿨 커뮤니티에서 더 많은 커리어 전략을 나눠요