TOP
class="layout-aside-left paging-number">
본문 바로가기
프로그래밍 및 기타/Cloud : AWS

[Cloud] 컨테이너 이미지 경량화 시키기

by 기록자_Recordian 2025. 2. 27.
728x90
반응형
이전 내용
 

[Cloud] 도커 허브에서 컨테이너 이미지 다운로드 & 업로드하기

이전 내용 [Cloud] 컨테이너 이미지, 컨테이너 생성 및 실행 (feat. 도커)이전 내용 [aws] Oracle Virtual Box 설치 및 실행이전 내용 [aws] Tomcat 서버와 DB 연동하기이전 내용 [aws] 도커(Docker) 란?이전 내용

puppy-foot-it.tistory.com


컨테이너 이미지 경량화

 

javainfo (버전1.) 이라는 컨테이너 이미지를 빌드하였다. 빌드가 성공한 뒤, 이미지를 조회해보면 SIZE가 나오는데, 912MB로 아주 크다. 이미지가 이렇게 크게 되면 저장 공간을 많이 잡아먹고, 배포에 오랜 시간이 걸린다. 따라서 이미지 SIZE를 줄일 (경량화) 필요가 있다.

 

컨테이너 이미지를 경량화 하기 위해서는 도커 파일을 수정해주면 된다.

vi 에디터를 이용해 도커파일을 켠 뒤, FROM 의 버전 뒤에 '-alpine'을 붙여 준뒤 저장(:wq)을 하고나서

 

 다시 빌드 (기존 이미지 삭제 또는 새로운 버전으로 > 필자는 기존 버전을 삭제하고 나서 재빌드 해줬다.)하고 나서 SIZE를 보면 기존의 912MB에서 119MB로 크기가 대폭 줄어든 것을 확인할 수 있다.


톰캣 서버 설치 도커파일
경량화 버전 vs 경량화 X 버전

 

두 개의 도커파일 스크립트가 있다.

이 도커파일의 대략적인 기능은 아래와 같다.

  • 톰캣 설치 + 환경변수 설정
  • 자바 설치 + 환경변수 설정
  • index.html 복사하여 붙여넣기

먼저, 경량화 버전

FROM alpine:latest as builder

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

# Set environment variables
ENV TOMCAT_VERSION 9.0.71
ENV CATALINA_HOME /usr/local/tomcat
ENV JAVA_HOME /usr/lib/jvm/java-17-openjdk-amd64
ENV PATH $CATALINA_HOME/bin:$PATH

# Install and configure Tomcat.
RUN mkdir $CATALINA_HOME
RUN wget https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/tomcat.tar.gz
RUN cd /tmp && tar xvfz tomcat.tar.gz
RUN cp -Rv /tmp/apache-tomcat-${TOMCAT_VERSION}/* $CATALINA_HOME
RUN rm -rf /tmp/apache-tomcat-${TOMCAT_VERSION}
RUN rm -rf /tmp/tomcat.tar.gz

COPY ./index.html $CATALINA_HOME/webapps/ROOT/

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

EXPOSE 8080

CMD ["catalina.sh", "run"]

 

그리고 경량화하지 않은 버전

FROM ubuntu:latest
LABEL maintainer="uploader <uploader@email.com>"

# Set environment variables
ENV TOMCAT_VERSION 9.0.71
ENV CATALINA_HOME /usr/local/tomcat
ENV JAVA_HOME /usr/lib/jvm/java-17-openjdk-amd64
ENV PATH $CATALINA_HOME/bin:$PATH

# Install JDK & wget packages.
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install openjdk-17-jdk wget

# Install and configure Tomcat.
RUN mkdir $CATALINA_HOME
RUN wget https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz -O /tmp/tomcat.tar.gz
RUN cd /tmp && tar xvfz tomcat.tar.gz
RUN cp -Rv /tmp/apache-tomcat-${TOMCAT_VERSION}/* $CATALINA_HOME
RUN rm -rf /tmp/apache-tomcat-${TOMCAT_VERSION}
RUN rm -rf /tmp/tomcat.tar.gz

COPY ./index.html $CATALINA_HOME/webapps/ROOT/

# Expose Tomcat port.
EXPOSE 80

# Start Tomcat
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

 

먼저 도커의 root 계정에 tomcat 이라는 폴더를 생성해주고 tomcat 폴더로 경로를 이동한다.

# tomcat 이라는 폴더 생성
mkdir tomcat

# tomcat 폴더로 경로 이동
cd tomcat

# ls는 해당 폴더 내 파일 확인

 

그리고 vi 에디터를 이용해 그 안에 index.html과 dockerfile을 생성해 준다. (vi 명령어: 파일이 없을 경우엔 생성, 있을 경우엔 수정) 

※ 아주 중요! 도커 파일의 파일명은 반드시 'dockerfile' 이어야 한다. (확장자 없이)

vi index.html

# 도커파일의 파일명은 반드시 'dockerfile' 이어야 함
vi dockerfile

도커파일에는 먼저 경량화 버전의 내용을 넣고 저장한 뒤 tomcat:v1.0 이라는 이름 및 태그로 빌드해 본다.

docker build -t tomcat:v1.0 .

# '.' 을 넣지 않으면 에러 발생

 

그러면 도커파일의 내용이 실행되며 안에 넣어놓은 내용들이 실행된다.

▶ 이를 보면 도커파일을 잘 작성하면 여태까지 했던 것들을 이 파일 한 방에 다 해버릴 수 있다. 그래서 개인적으로 도커의 핵심은 도커파일이라고 본다.

 

[여태까지 일일이 했던 거]

[Cloud] Xshell8 에서 톰캣 설치하기

[Cloud] 프록시 패스: 도메인 톰캣 화면으로 바꾸기

+ aws에 들어가 인스턴스를 생성하고 뭐 이런 작업들도 아예 필요가 없어진다.

 

아무튼, 도커파일 작성하는 법이 매우매우 중요하니, 별도로 공부할 필요가 커 보인다.

 

 

경량화된 버전을 빌드하고나서, 경량화되지 않은 버전을 태그는 v2.0으로 빌드해보고

docker images 명령어로 SIZE를 비교해보면 아래와 같이 확연히 차이가 난다. (실제로 빌드하는 데도 엄청난 시간 차이가 발생했다.)

▶ 이거를 여러군데 배포한다고 생각해보면 왜 경량화가 필요한지 깨달을 수 있다.

 

컨테이너가 잘 생성되었는지 확인하기 위해 inspect 명령어로 검토해보고

 

마지막으로 도커 허브에 tag와 push 명령어를 사용하여 업로드해주면

 

이렇게 도커 허브에 업로드 된 것을 확인할 수 있다.

참고로, 도커 허브에 올라가 있는 복제본과 원본의 이미지 ID는 똑같다.


이미지를 경량화해야 하는 이유

 

 

1. 저장 공간 절약
경량화된 이미지는 필요하지 않은 파일이나 패키지가 제거됨으로써 디스크 용량을 절약할 수 있다. 이는 특히 대규모 환경에서 많은 컨테이너를 운영할 경우 중요한 요소이다.


2. 빠른 배포 및 시작 시간
이미지 크기가 작을수록 다운로드 및 배포 시간이 단축된다. 경량화된 이미지는 네트워크 전송 시간과 컨테이너 시작 시간을 줄여, 사용자에게 더 나은 경험을 제공한다.


3. 보안 향상
불필요한 패키지나 파일이 제거됨으로써 공격 표면이 줄어들어 보안이 강화된다. 이는 취약점이 있는 패키지가 포함될 가능성이 낮아진다는 것을 의미한다.


4. 성능 개선
작고 경량화된 이미지는 메모리 소비가 적어 시스템 자원을 보다 효율적으로 사용할 수 있다. 이는 특히 리소스가 제한된 환경에서 유용하다.


5. 관리 용이성
작은 이미지는 복잡한 종속성을 줄이므로, 유지 관리가 더 쉽다. 주기적인 업데이트와 보안 패치 적용 시, 경량화된 이미지가 보다 간편하다.


6. 재사용성 증가
작은 기본 이미지와 경량화된 애플리케이션 이미지는 보다 쉽게 재사용될 수 있다. 이는 다른 프로젝트나 환경에서도 동일한 이미지를 활용할 수 있게 해 준다.


7. 클라우드 비용 절감
클라우드 기반 환경에서는 저장소 비용이 발생할 수 있다. 이미지 크기를 줄이는 것은 클라우드 이용 비용을 낮추는 데 도움이 될 수 있다.


다음 내용

 

[Cloud] 도커로 DB 연결하기

이전 내용 [Cloud] 컨테이너 이미지 경량화 시키기이전 내용 [Cloud] 도커 허브에서 컨테이너 이미지 다운로드 & 업로드하기이전 내용 [Cloud] 컨테이너 이미지, 컨테이너 생성 및 실행 (feat. 도커)이

puppy-foot-it.tistory.com

728x90
반응형