
Docker image 경량화INFRA/Doker2024. 7. 29. 00:17
Table of Contents
이미지 경량화
- 이미지 크기가 커지면 컨테이너 크기도 커지기 때문에 경량화가 중요 → 빠른 배포를 위해 이미지 크기를 작게 해야함
1. 꼭 필요한 패키지 파일만 추가
- 필요한 파일 및 패키지를 제외하여 이미지 크기 최소화
2. 컨테이너 레이어 수 줄이기
- &&으로 run 개수==레이어 개수를 줄어야 한다.
- 강제적으로 임시 이미지, 컨테이너 제거
docker build --force-rm -t nodejs-server .
- Node.js 서버의 예시 Dockerfile : 이미지 크기를 줄이기 위해 최적화된 방법을 사용
root@docker:~/01.docker-file/nodejs-server# ls
Dockerfile Dockerfile.alpine Dockerfile.alpine-multi Dockerfile.slim package.json server.js
root@docker:~/01.docker-file/nodejs-server# vi Dockerfile
#
# nodejs-server
#
# build:
# docker build --force-rm -t nodejs-server .
# run:
# docker run --rm -it --name nodejs-server nodejs-server
#
FROM node:16
LABEL maintainer="a"
LABEL description="Simple server with Node.js"
# Create app directory
WORKDIR /app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
- 그냥 빌드하면 용량이 900MB 넘음
--docker build -t [이미지명] -f [도커파일경로] .
root@docker:~/01.docker-file/nodejs-server# docker build --force-rm -t nodejs-server .
root@docker:~/01.docker-file/nodejs-server# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-server latest 7ed31cd65e58 9 seconds ago 916MB
3. 경량 베이스 이미지 선택
3-1. slim
- 이미지 빌드
--이미지 빌드
--빌드 완료 후 중간 컨테이너를 강제 제거
--생성된 이미지를 'nodejs-server:slim' 태그 지정
--'Dockerfile.slim' 파일을 사용하여 이미지를 빌드
-- . 현재 디렉토리를 빌드 컨텍스트로 사용
docker build --force-rm -t nodejs-server:slim -f Dockerfile.slim .
- Dockerfile.slim 확인
root@docker:~/01.docker-file/nodejs-server# vi Dockerfile.slim
FROM node:16-slim
LABEL maintainer="a"
LABEL description="Simple server with Node.js"
--위와 같음
CMD [ "node", "server.js" ]
- slim 표시로 인해 경량화되었음
root@docker:~/01.docker-file/nodejs-server# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-server slim 7abc4e7cce10 9 seconds ago 186MB
nodejs-server latest 7ed31cd65e58 7 minutes ago 916MB
3-2 alpine
- 이미지 빌드
docker build --force-rm -t nodejs-server:alpine -f Dockerfile.alpine .
- Dockerfile.alpine 확인
FROM node:16-alpine
--이하 내용 같음--
- alpine 표시로 인해 경량화되었음
root@docker:~/01.docker-file/nodejs-server# docker build --force-rm -t nodejs-server:alpine -f Dockerfile.alpine .
root@docker:~/01.docker-file/nodejs-server# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-server alpine 3c0cfe00fb98 21 seconds ago 124MB
nodejs-server slim 7abc4e7cce10 2 minutes ago 186MB
nodejs-server latest 7ed31cd65e58 9 minutes ago 916MB
4. 멀티 스테이지 빌드 사용
- 이미지 빌드
docker build --force-rm -t nodejs-server:alpine-multi -f Dockerfile.alpine-multi .
- Dockerfile.alpine-multi 확인
--base라는 이름을 밑에서 재사용할수있음
FROM node:16-alpine AS base
LABEL maintainer=""
LABEL description="Simple server with Node.js"
# Create app directory
WORKDIR /app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
------------
FROM base AS build
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
FROM base AS release
COPY --from=build /app/node_modules ./node_modules
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
- 경량화 완료
root@docker:~/01.docker-file/nodejs-server# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs-server alpine-multi 9ddb751f98ee 3 seconds ago 120MB
'INFRA > Doker' 카테고리의 다른 글
Docker Image registry : pravate, hub.docker.com (0) | 2024.07.29 |
---|---|
Docker 구성요소 / 접근 방법 (0) | 2024.07.28 |
Docker 명령어 정리 (0) | 2024.07.28 |