본문 바로가기
Docker

[Docker] Container를 로컬(Host)에 설치된 서비스를 기반으로 구동하기

by 임채훈 2021. 1. 30.

이전 포스팅에서 Tomcat을 예시로 직접 Custom docker image를 빌드하여 컨테이너를 실행하는 과정을 정리했습니다.

 

본론으로 들어가기에 앞서 이전 포스팅에서 빌드한 Custom docker image를 만드는 과정(Dockerfile에 작성한 command step)을 간단하게 정리해보면 아래와 같은 과정을 거쳐 image를 빌드합니다.

 

1. openjdk:8-jdk 베이스 이미지 다운로드

2. apt (ubuntu package manager) 업데이트

3. wget 설치

4. Apache Tomcat CDN 서버로부터 Tomcat 설치 압축파일 다운로드

5. 압축 해제 및 디렉토리명 변경

6. 사용할 포트 설정

7. Container Entrypoint 설정

 

그럼 로컬에 설치된 서비스를 Docker container로 구동하는 방법에 대하여 제시해보도록 하겠습니다.

 

예시는 이전과 동일하게 Apache Tomcat을 기반으로 작성하도록 하겠습니다.

 

첫번째

기존에 build한 이미지가 있을텐데 tomcat 디렉토리 전체를 호스트에서 컨테이너로 마운트를 하여 컨테이너를 실행할 수 있습니다.

이게 무슨말인가 하면 이전 포스팅에서 image build 후 container를 실행할때 사용한 명령어를 보면

docker run -d -p 8080:8080 --name tomcat9 \
        -v /usr/local/docker/tomcat9/conf:/usr/local/tomcat9/conf \
        -v /usr/local/docker/tomcat9/logs:/usr/local/tomcat9/logs \
        -v /usr/local/docker/tomcat9/webapps:/usr/local/tomcat9/webapps \
        -e CATALINA_HOME=/usr/local/tomcat9 \
        -e CATALINA_BASE=/usr/local/tomcat9 tomcat9

위와 같이 -v 옵션을 통하여 특정 로컬(호스트) 디렉토리 (conf, logs, webapps)들을 컨테이너에 마운트 설정해주었습니다.

따라서 -v 옵션인 볼륨 마운트 옵션을 활용하여 로컬에 설치된 tomcat 디렉토리 전체를 컨테이너에 마운트 해주는 방법이 있습니다.

최종적으로 컨테이너 실행 명령어는 아래의 명령어가 될겁니다.

docker run -d -p 8080:8080 --name tomcat9 \
        -v /usr/local/docker/tomcat9:/usr/local/tomcat9 \
        -e CATALINA_HOME=/usr/local/tomcat9 \
        -e CATALINA_BASE=/usr/local/tomcat9 tomcat9

 

두번째

첫번째 방법은 최초에 image를 만들때 새로운 tomcat 설치 압축파일을 다운받아서 압축을 풀고 디렉토리명을 바꾸는 등의 일련의 작업들이 진행되었던 이미지이기 때문에 무언가 찝찝함이 있습니다.

그러므로 처음에 image를 build 할때부터 일종의 깡통 이미지를 만들어서 실행하는 방법이 있습니다.

 

우선 이전 Tomcat custom docker image 생성하기 포스팅에 작성했던 Dockerfile입니다.

  • Dockerfile

FROM openjdk:8-jdk
MAINTAINER chaehoon

WORKDIR /usr/local

RUN apt-get update
RUN apt-get install -y wget

RUN wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.41/bin/apache-tomcat-9.0.41.tar.gz
RUN tar -xvzf apache-tomcat-9.0.41.tar.gz
RUN mv apache-tomcat-9.0.41 tomcat9

WORKDIR /usr/local/tomcat9

EXPOSE 8080

ENTRYPOINT ["./bin/catalina.sh", "run"]

이전 이미지 build의 과정을 보면 Apache Tomcat CDN 서버로부터 Tomcat 설치 압축파일 다운로드를 하도록 설정을 했습니다.

지금은 어차피 이미 로컬에 설치된 서비스가 존재하기 때문에 새로운 설치 압축파일을 다운로드 받는 절차를 제거하고 빈 폴더만 만들어 공간을 확보해주도록 처리하겠습니다.

수정된 Dockerfile은 아래와 같습니다.

  • Dockerfile

FROM openjdk:8-jdk
MAINTAINER chaehoon

RUN mkdir -p /usr/local/tomcat9

WORKDIR /usr/local/tomcat9

EXPOSE 8080

ENTRYPOINT ["./bin/catalina.sh", "run"]

이후 작성된 Dockerfile를 기반으로 image build를 해주도록 합니다.

docker build . -t tomcat9

다음으로 build된 이미지를 기반으로 컨테이너를 구동합니다.

docker run -d -p 8080:8080 --name tomcat9 \
        -v /usr/local/docker/tomcat9:/usr/local/tomcat9 \
        -e CATALINA_HOME=/usr/local/tomcat9 \
        -e CATALINA_BASE=/usr/local/tomcat9 tomcat9

 

추가적으로 컨테이너 구동 명령어의 핵심 설정은 -v /usr/local/docker/tomcat9:/usr/local/tomcat9 입니다.

여러개의 tomcat directory를 사용하여 컨테이너를 띄워야 된다면 컨테이너를 실행할때 해당 Host Directory를 자유자재로 변경해가며 실행해 줄 수 있습니다.

댓글