도커 파일을 이용한 커스텀 톰캣 환경 구축

다음은 Dockerfile을 사용하여 CentOS 기반의 커스텀 톰캣 서버 이미지를 생성하는 절차입니다. 이 과정에서는 JDK와 Apache Tomcat 바이너리를 포함시켜 독립적인 웹 애플리케이션 실행 환경을 도커로 패키징합니다.

1. 필요한 파일 준비

빌드를 위해 다음 두 가지 파일을 빌드 컨텍스트 디렉터리에 미리 다운로드해야 합니다:

  • JDK 8u131 리눅스 64비트 압축 파일 (jdk-8u131-linux-x64.tar.gz)
  • Apache Tomcat 9.0.75 배포판 (apache-tomcat-9.0.75.tar.gz)

또한, 필요 시 설명을 위한 간단한 텍스트 파일 readme.txt를 함께 포함할 수 있습니다.

2. Dockerfile 작성

프로젝트 루트에 Dockerfile이라는 이름으로 아래 내용을 작성합니다:

FROM centos:7
LABEL maintainer="admin@example.com"

# 로컬 파일 복사
COPY readme.txt /usr/local/
ADD jdk-8u131-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.75.tar.gz /usr/local/

# 시스템 유틸 설치
RUN yum install -y vim net-tools

# 작업 디렉터리 설정
WORKDIR /usr/local
ENV JAVA_HOME=/usr/local/jdk1.8.0_131
ENV CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME=/usr/local/apache-tomcat-9.0.75
ENV PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

EXPOSE 8080

# 컨테이너 실행 시 톰캣 시작 및 로그 스트리밍
CMD ["/usr/local/apache-tomcat-9.0.75/bin/startup.sh", "&&", "tail", "-F", "/usr/local/apache-tomcat-9.0.75/logs/catalina.out"]

기존 예제에서 MAINTAINER 지시어는 오래된 방식이며, 현재는 LABEL을 사용하는 것이 권장됩니다. 또한 CMD에서 쉘 형식 대신 exec 형식을 사용하기 위해 명령어를 배열로 재구성했습니다.

3. 이미지 빌드

현재 디렉터리에 모든 파일이 준비된 상태에서 다음 명령어로 이미지를 빌드합니다:

$ docker build -t custom-tomcat .

성공적으로 빌드가 완료되면 다음과 유사한 결과를 확인할 수 있습니다:

$ docker images | grep custom-tomcat
custom-tomcat   latest    a1b2c3d4e5f6   2 minutes ago   890MB

4. 컨테이너 실행 및 마운트 구성

빌드된 이미지를 기반으로 컨테이너를 백그라운드에서 실행하고, 외부 디렉터리를 볼륨으로 마운트합니다:

$ docker run -d \
  --name myweb-container \
  -p 8040:8080 \
  -v /home/user/tomcat/app:/usr/local/apache-tomcat-9.0.75/webapps/test \
  -v /home/user/tomcat/logs:/usr/local/apache-tomcat-9.0.75/logs \
  custom-tomcat

실행 상태 확인:

$ docker ps --filter name=myweb-container
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS       PORTS                    NAMES
a1b2c3d4e5f6   custom-tomcat   "/bin/sh -c '/usr/l..."  30 seconds ago  Up 29 seconds  0.0.0.0:8040->8080/tcp   myweb-container

5. 접속 테스트

호스트 머신에서 포트 8040으로 HTTP 요청을 보내 톰캣 기본 페이지가 응답되는지 확인합니다:

$ curl -s http://localhost:8040 | head -n 10
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Apache Tomcat/9.0.75</title>

성공적으로 응답이 오면 톰캣이 정상적으로 실행 중이며, 도커 컨테이너 내에서 웹 서버가 동작하고 있음을 의미합니다. 방화벽 또는 클라우드 보안 그룹 설정에서 해당 포트(8040)가 열려 있는지 확인해야 합니다.

이 방식을 통해 반복 가능한 방식으로 일관된 톰캣 실행 환경을 구성할 수 있으며, CI/CD 파이프라인에서도 활용 가능합니다.

태그: Dockerfile Tomcat Docker Build Java Web Server Containerization

5월 21일 01:39에 게시됨