[Kubernetes] Dockerfile을 이용한 Tomcat:9 이미지 만들기
docker hub에는 수 많은 미리 만들어진 이미지들을 사용할 수 있습니다. 하지만, Image들을 직접 만들어 보고 띄어 보고자 하여 진행을 하게 되었습니다.
진행에 앞서, Dockerfile의 기본적인 형태에 대해 알아 보겠습니다.
- FROM : 이미지를 생성할 때 사용할 기반 이미지를 지정한다. 예제에서는 openjdk:8-jdk 이미지를 사용했다.
- RUN : 이미지를 생성할 때 실행할 코드를 지정한다. 예제에서는 패키지를 설치하고 파일 권한을 변경하기 위해 RUN을 사용했다.
- WORKDIR : 작업 디렉토리를 지정한다. 해당 디렉토리가 없으면 새로 생성한다. 작업 디렉토리를 지정하면 그 이후 명령어는 해당 디렉토리를 기준으로 동작한다.
- COPY : 파일이나 폴더를 이미지에 복사한다. 위 코드에서 두 번째 COPY 메서드는 entrypoint.sh 파일을 이미지에 run.sh 이름으로 복사한다. 상대 경로를 사용할 경우 WORKDIR로 지정한 디렉토리를 기준으로 복사한다.
- ENV : 이미지에서 사용할 환경 변수 값을 지정한다. 위 코드는 PROFILE 환경 변수의 값으로 local을 지정했는데 이 경우 컨테이너를 생성할 때 PROFILE 환경 변수를 따로 지정하지 않으면 local을 기본 값으로 사용한다.
- ENTRYPOINT : 컨테이너를 구동할 때 실행할 명령어를 지정한다. 위에서는 run.sh을 실행하도록 설정했다.
FROM openjdk:8-jdk
ENV CATALINA_HOME /usr/local/tomcat9
RUN apt-get update -y && apt-get install -y --no-install-recommends && apt-get install -y stress && apt-get install -y wget ca-certificates && apt-get install -y gnupg dirmngr
RUN wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz WORKDIR ${CATALINA_HOME} RUN mv webapps webapps.org WORKDIR ${CATALINA_HOME}/webapps
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"] |
기본적으로 8080포트를 오픈해 주었으며, deployment를 생성하였을 때 8080포트를 컨테이너 상에서 오픈을 해주었습니다.
Docker 이미지를 생성할때 아래서 위로 layer가 생성 되므로 패키지 설치를 먼저 하고, 최대한 손을 대지 않고 작업하는 편이 빌드 시에 좀 더 효율적으로 사용이 가능할 것입니다.
docker build -t tomcat . |