본문 바로가기
개발/Docker&kubernetes

Docker Multi Application(여러 어플리케이션) 실행

by 궁즉변 변즉통 통즉구 2022. 9. 6.
반응형

컨테이너 사용 시 자주 발생할 것 같지도 않고, 컨테이너 사상과도 안맞을 것 같지만 한개의 컨테이너에서 여러개의 프로그램을 실행해야하는 일이 생겼다. 기존 시스템을 컨테이너로 전환하면서 내부적인 상황으로 컨테이너를 분리하지 못하고 한개 컨테이너로 실행을 해야 하는 경우인데 처음에는 좀 막막했지만 생각보다 간단했다.

결론부터 얘기하자면, 컨테이너에서 메인 프로그램은 일반적인 컨테이너처럼 포그라운드로 실행시키고, 나머지 프로그램들은 백그라운드로 실행을 시키면 된다.

 

간단히 예를 들어서 한개의 컨테이너에 2개의 어플리케이션을 실행해야 한다고 하면 아래와 같이 구성한다. 

먼저 Dockerfile에서 어플리케이션을 컨테이너로 모두 Copy 한다. 

...
RUN mkdir  /app
COPY ./app1.jar /app/subApp.jar
COPY ./app2.jar /app/mainApp.jar

EXPOSE 8080 8081

COPY ./start_wrapper.sh /app
RUN chmod +x /app/wrapper_script.sh
CMD ["/app/wrapper_script.sh"]

2개의 어플리케이션을 실행할 wrapper_script.sh 쉘파일을 만들고, 이 쉘 파일도 컨테이너로 Copy한다. 그리고 컨테이너가 실행될 때 wrapper_script.sh 파일이 실행되도록 Dockerfile을 작성한다.

 

wrapper_script.sh 파일은 간단히 다음과 같은 구조이다.

#!/bin/bash

# 서브APP 백그라운드 실행
nohup java -jar subApp.jar &

# MainApp 포그라운드 실행
java -jar mainApp.jar

설정 후 컨테이너를 실행해보면 2개 어플리케이션이 실행된다. 여기서 subApp에 대한 로그를 확인하기가 힘들어진다는 문제가 있는데(mainApp은 컨테이너 로그로 확인 가능) subApp에 대한 로그는 별도 Volume으로 설정을 하던지해서 해야할 것 같다.

 

반응형

댓글