728x90
반응형
Tomcat 설치
http://apache.mirror.cdnetworks.com/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
Java WebApp 설치
https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/
Tomcat webapps 폴더 내에 압축을 풀어서 넣기
💡 war 파일을 넣고 Tomcat 시작 시 자동으로 푸는 구조로 하지 않는 이유는 Docker Volume 사용 시 Java Webapp Property 혹은 풀린 war 폴더 내부 수정 시 마다 프로젝트가 재생성 됩니다.
Tomcat 폴더 구조
- 폴더메인
- webapps
Dockerfile
# 베이스 이미지를 CentOS로 지정합니다.
FROM centos
# baseurl 설정을 CentOS 레거시 리포지토리(<http://mirror.centos.org>)에서 CentOS Vault 리포지토리(<http://vault.centos.org>)로 변경합니다.
# 오래된 CentOS 버전의 패키지를 찾도록 합니다.
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# CentOS 리포지토리를 통해 Java를 설치합니다. 이 과정에서 OpenJDK가 기본 설치됩니다.
RUN yum install -y java
# 현재 디렉토리의 내용을 이미지의 /opt 디렉토리에 복사합니다.
# 컨테이너 내부에서 애플리케이션의 코드나 구성 파일 등을 사용할 수 있습니다.
COPY . ./opt
# 환경 변수 CATALINA_OPTS를 설정하여 Tomcat의 HTTP, HTTPS 포트와 데이터베이스 연결 정보를 지정합니다.
ENV CATALINA_OPTS="-Dport.http=8080 -Dport.https=8081 -Dport.repo=jdbc:postgresql://192.168.10.17:5432/rep_trans47"
# 컨테이너가 8009 포트를 사용하도록 지정합니다.
# 이 포트는 컨테이너 내부에서 사용되며, 컨테이너 외부에서 접근할 수 있도록 호스트 포트를 매핑해야 합니다.
EXPOSE 8009
docker-compose.yml
# Docker Compose 파일 버전을 지정하여 사용할 수 있는 기능과 문법을 결정합니다.
version: '3.7'
# 실행할 컨테이너의 정의를 포함합니다. 여기서는 mytomcat이라는 서비스 하나만 정의되어 있습니다.
services:
# mytomcat 서비스에 대한 설정을 포함합니다.
mytomcat:
# 컨테이너의 이름을 mytomcat으로 지정합니다.
container_name: mytomcat
# 현재 디렉토리(./)에 있는 Dockerfile을 사용하여 이미지를 빌드합니다. 이 설정은 image 설정을 대체합니다.
build: ./
# 컨테이너와 호스트 시스템 간에 데이터를 공유하는 데 사용되는 볼륨을 정의합니다.
# 여기서는 현재 디렉토리(.)를 컨테이너의 /opt 디렉토리에 마운트합니다.
volumes:
- .:/opt
# 컨테이너가 실행되는 동안 내부적으로 사용할 포트를 지정합니다.
expose:
- "8009"
# 호스트 시스템의 포트와 컨테이너의 포트를 연결하여 외부에서 컨테이너에 접근할 수 있게 합니다.
# 여기서는 호스트의 8888 포트를 컨테이너의 8080 포트에 연결합니다.
ports:
- "8888:8080"
# 컨테이너가 표준 입력(stdin)을 열어 둘지 여부를 결정합니다. 이 설정은 컨테이너가 표준 입력을 받아들일 수 있도록 합니다.
stdin_open: true
# 컨테이너에 대한 TTY(텍스트 터미널)를 할당할지 여부를 결정합니다. 이 설정은 컨테이너가 대화식 쉘에서 실행될 수 있도록 합니다.
tty: true
실행
docker-compose up -d
환경 변수 사용
<!--Tomcat server.xml-->
<Connector port="${port.http}" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"/>
<!--Java Application context.xml-->
<Resource name="jdbc/Repository"
auth="Container"
type="javax.sql.DataSource"
username="username"
password="password"
driverClassName="org.postgresql.Driver"
url="${port.repo}"/>
트러블 슈팅
에러 상황
docker-compose up -d 실행 시 시작과 동시에 종료된다.
상황 파악
도커의 컨테이너는 버츄얼 머신이 아니기에 명령문에 따라 실행되고 바로 종료되거나 입출력을 열어놓고 기다린다.
그렇기에 전 컨테이너 실행시 -it(interacitve, tty) 옵션을 사용했던 것 처럼 docker-compose.yml에 동일하게 사용하였다.
에러 해결
# docker-compose.yml
# 컨테이너가 표준 입력(stdin)을 열어 둘지 여부를 결정합니다. 이 설정은 컨테이너가 표준 입력을 받아들일 수 있도록 합니다.
stdin_open: true
# 컨테이너에 대한 TTY(텍스트 터미널)를 할당할지 여부를 결정합니다. 이 설정은 컨테이너가 대화식 쉘에서 실행될 수 있도록 합니다.
tty: true
728x90
반응형
'Docker' 카테고리의 다른 글
CentOS + Tomcat + Docker 배포 (0) | 2024.02.20 |
---|---|
Docker React Vite 배포 (0) | 2024.02.20 |
Docker NginX React Vite 배포 (0) | 2024.02.20 |