목적
- 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

