[Docker] Multistage Build

hugingstar·2026년 2월 13일

Docker

목록 보기
19/19
post-thumbnail

목적

  • Container image를 만들면서 Build등에는 필요하지만 최종적으로 필요없는 환경을 제거한다.
  • Build에 사용한 파일(Directory)와 같은 실행에 관련 없는 파일을 모두 삭제

방식

  • 단계를 나워 기반 Image를 만든다.
    (1) 개발 환경용 Docker image
    (2) 제품 환경용 Docker image

Multi stage

  • 작업 경로 : /root/sg-build
  • Dockerfile
  • ROOT.war (Sample.zip 활용)
  • 특이한점 : FROM이 두 개가 달려있다.(빌드와 실행 부분이 다르기 때문이다.)
  • alpine은 apk를 사용해서 다운로드 한다.
  • openjdk8는 자바를 구동할 수 있는 환경이다.
  • rm은 설치가 다되서 필요없는 것을 다 지운다.
  • from=builder : 빌드 스테이지에서 했던 것을 AS 처리를 한 것이다. (실행에서 빌드꺼를 가져다가 쓴다.)
  • Java는 메모리를 많이 사용한다. 사람들이 만든것을 쓰면 무거워지므로 가볍게 만든다.
# Dockerfile 작성한 내용
FROM alpine:latest AS builder

RUN apk update && \
    apk add --no-cache openjdk8 curl tar

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV CATALINA_HOME=/usr/local/tomcat
ENV TOMCAT_VERSION="9.0.91"

RUN curl -O https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    mkdir -p $CATALINA_HOME && \
    tar -xvf apache-tomcat-${TOMCAT_VERSION}.tar.gz -C $CATALINA_HOME --strip-components=1 && \
    rm apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    rm -rf $CATALINA_HOME/webapps/examples \
           $CATALINA_HOME/webapps/docs \
           $CATALINA_HOME/webapps/manager \
           $CATALINA_HOME/webapps/host-manager && \
    chmod +x $CATALINA_HOME/bin/*.sh

FROM alpine:latest

RUN apk add --no-cache openjdk8-jre-base && \
    rm -rf /var/cache/apk/*

ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV CATALINA_HOME=/usr/local/tomcat
ENV PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH

COPY --from=builder $CATALINA_HOME $CATALINA_HOME
RUN mv /usr/local/tomcat/webapps/ROOT /usr/local/tomcat/webapps/root.bak
COPY ./ROOT.war /usr/local/tomcat/webapps/

EXPOSE 8080

CMD ["catalina.sh", "run"]
  • 빌드한다.
docker build -t tc:1.0 .
  • 컨테이너 실행한다.
docker container run --name tc -p 8080:8080 -d tc:1.0

0개의 댓글