개발 환경구축

[Docker] 도커 이미지 파일 생성시 크기가 커지는 문제 해결

Mr.Ban 2025. 1. 23. 14:56

offline으로 설치하기 위해 docker image를 파일로 만들다 발생한 문제이다.

도커 이미지가 빌드를 반복할수록 docker image 파일을 만들때 파일 크기가 커지는 현상이 발생하였다.

실제로 컨테이너 내부에 용량은 작은데 이상한 일이 여서 관련 문제에 대해 정리 해보았다.

 

docker image 파일 생성 명령어

docker save -o ./my-image.docker my-image

docker image 목록 확인

# docker image 목록 확인, 용량도 같이 표시된다.
docker images

 

이것저것 확인한 결과  동일한 image 명이 여러개 존재시에 docker image 파일 크기가 커지는 걸로 결론이 났다.
그래서 아래와 같은 명령어로 latest만 남기고 이미지를 정리하여 파일을 생성했다.

이미지 캐시 정리

# 불필요 이미지 삭제
docker image prune -a

docker save -o ./my-image.docker my-image

물론 prune 명령어가 아닌 직접 이미지를 삭제해도된다.

(prune은 사용하고 있지 않은 이미지를 정리하는 거니깐 의도한 바가 이루어지지 않을 수 있음)

기타 이미지 크기 줄이는 법

.dockerignore 작성

node_modules
dist
.vscode

.dockerignore 파일을 이용하면 Dockerfile에서 해당 파일 목록은 제외시키고 진행된다. 예를들어 Dockerfile 에서 아래와 같이 COPY를 진행할때 위에 목록은 제외되고 복사가 된다.

# Dockerfile
...
COPY ./ ./
...

 

Multi-stage Build 사용

Dockerfile

# 1단계: 빌드 단계
FROM node AS build

WORKDIR /app

COPY ./ ./
RUN npm install
RUN npm run build

FROM node:20-alpine

# 앱 디렉터리 생성
WORKDIR /usr/src/app

# 앱 의존성 설치
# 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해
# 와일드카드를 사용
COPY package*.json ./
COPY env ./env

# 앱 소스 추가
# 빌드된 파일을 복사한다.
**COPY --from=build /app/dist /usr/src/app/dist**

RUN npm install module-alias@^2.2.3

CMD npm run start

1단계에서 필요 패키지를 모두 설치한 다음 빌드를 진행한다.

최종단계에서 1단계에서 빌드된 파일을 복사하여 해당 파일을 실행한다.

 

마치며

내가 부딪혔던 문제는 불필요한 docker image 레이어가 쌓여서 문제였으나, 이외에도 경량화를 위한 다양한 방법이 있다는 것을 알게 되었다. 지금 도커 이미지들을 확인하여 과거와 다르게 증가되었는지 꼭 확인하고 위에 방법들로 경량화를 해보자.