본문 바로가기
#IT 업무노트

[Cluster 전환 #6] N개 프로젝트 도커 파일 빌드 가이드

by 꾸미라기 2024. 6. 27.
반응형
SMALL
기존 온프레미스 환경에서 두 개의 서버로 구성되어있으며, 1번 서버에는 하나의 ZEUS에 Application 1, Application 2, Application 3 3개의 서비스가 돌아가고 있어 동일하게 3개 PJT를 한 번에 빌드하여 실행시키는 방법을 수십 번의 시도 끝에 아래의 도커 파일을 완성하였다.
 
 

2. 프로젝트 구조 

 

conf

 > context.xml (사용안함)
 > server.xml
k8s
 > deploy.yaml
 > ingress.yaml
 > service.yaml
library
 > library 목록 (폐쇄망으로 로컬레포지토리 구성)
pipelines
 > pipieline.yaml
Project_A
 > src, pom.xml, src/main/webapp/META-INF/context.xml .....(context.xml은 각 프로젝트 별 접속 DB가 다를 경우 현 위치에 넣는다)
Project_B
 > src, pom.xml, src/main/webapp/META-INF/context.xml .....
Project_C
 > src, pom.xml, src/main/webapp/META-INF/context.xml .....
Dockerfile

 

3. Dockerfile

 
########## Stage 1: Build projects ##########
# myacr/agent/build/java8-maven:3.8.6 이미지를 기반으로 새로운 빌드 스테이지를 시작합니다.
# 이미지에는 Java 8과 Maven 3.8.6이 설치되어 있습니다.
# AS builder는 이 스테이지의 이름을 builder로 설정하여 이후에 참조할 수 있도록 합니다.
FROM myacr/agent/build/java8-maven:3.8.6 AS builder

# Set working directory
# 컨테이너 내에서 작업 디렉토리를 /ipapp으로 설정합니다.
WORKDIR /ipapp

# Copy project files
# Build each project
# 각 프로젝트와 라이브러리 파일을 컨테이너의 작업 디렉토리로 복사합니다.
# mvn clean package -Dmaven.test.skip=true 명령을 사용하여 각 프로젝트를 빌드합니다.
# -f 옵션은 특정 POM 파일을 지정합니다.
# clean은 이전 빌드 아티팩트를 제거합니다.
# package는 프로젝트를 패키징합니다 (일반적으로 JAR 또는 WAR 파일로).
# -Dmaven.test.skip=true는 테스트를 건너뜁니다

COPY ./library /ipapp/library

COPY ./Project_A /ipapp/Project_A
RUN mvn -f /ipapp/Project_A/pom.xml clean package -Dmaven.test.skip=true

COPY ./Project_B /ipapp/Project_B
RUN mvn -f /ipapp/Project_B/pom.xml clean package -Dmaven.test.skip=true

COPY ./Project_C /ipapp/Project_C
RUN mvn -f /ipapp/Project_C/pom.xml clean package -Dmaven.test.skip=true

########## Stage 2: Run Tomcat ##########
# myacr/docker/tomcat:9.0.83-jdk8-corretto-al2-umask 이미지를 기반으로 새로운 실행 스테이지를 시작합니다.
# 이미지에는 Tomcat 9.0.83과 JDK 8이 포함되어 있습니다.
FROM myacr/docker/tomcat:9.0.83-jdk8-corretto-al2-umask

# Copy built WAR files to Tomcat webapps directory
# 빌드 스테이지(builder)에서 생성된 WAR 파일을 Tomcat의 webapps 디렉토리로 복사합니다.
# 각각의 프로젝트에 대해 빌드된 WAR 파일을 복사하여 Tomcat에서 실행될 수 있도록 합니다.
COPY --from=builder /ipapp/Project_A/target/*.war /usr/local/tomcat/webapps/Project_A.war
COPY --from=builder /ipapp/Project_B/target/*.war /usr/local/tomcat/webapps/Project_B.war
COPY --from=builder /ipapp/Project_C/target/*.war /usr/local/tomcat/webapps/Project_C.war

# 3개의 WAR파일이 하나의 톰캣에서 실행 시킬 수 있도록 설정 된 server.xml 을 컨테이너로 복사합니다.
ADD ./conf/server.xml /usr/local/tomcat/conf/

# Start Tomcat
# catalina.sh run 명령을 사용하여 Tomcat 서버를 시작합니다.
# 이 명령은 Tomcat이 포그라운드에서 실행되도록 하여 컨테이너가 계속 실행되도록 합니다.
CMD ["catalina.sh", "run"]



반응형