도커는 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있는 강력한 도구입니다.
이번 블로그에서는 도커의 핵심 개념 중 하나인 Dockerfile Layers에 대해 자세히 알아보고, 실제로 사용되는 Dockerfile 예시를 통해 최적화하는 방법을 살펴보겠습니다.
Dockerfile Layers란?
Dockerfile은 컨테이너 이미지를 빌드하기 위한 스크립트입니다. 각 명령어는 새로운 레이어를 생성하며, 레이어는 이미지의 변경 가능한 부분을 나타냅니다. 이해를 돕기 위해 주어진 Dockerfile을 살펴봅시다.
FROM node:16-alpine
WORKDIR /usr/src/appCOPY
package*.json .
RUN npm install
RUN npm install mysql -save
RUN npm install typeorm -save
run npm install bcrypt -save
COPY . .
EXPOSE 3000CMD ["npm","start"]
Dockerfile 설명
Base Image 설정:
FROM node:16-alpine
node:16-alpine 이미지를 기반으로 사용합니다.
작업 디렉토리 설정:
WORKDIR /usr/src/app
작업 디렉토리를 /usr/src/app으로 설정합니다.
패키지 파일 복사 및 의존성 설치:
COPY package*.json .
RUN npm install
패키지 파일을 복사하고, 의존성을 설치합니다. 여기서 주목할 점은 두 명령어가 동일한 레이어에 속한다는 것입니다. 비슷한 명령어는 가능한 한 합쳐서 레이어의 수를 최소화해야 합니다.
MySQL 및 TypeORM 설치,bcrypt 설치:
RUN npm install mysql -save
RUN npm install typeorm -save
RUN npm install bcrypt -save
MySQL 및 TypeORM,bcrypt을 설치합니다. 이 부분도 가능하다면 하나의 RUN 명령어로 합칠 수 있습니다.
지금 작성된 docker file은 프로젝트때 실행하여 사용한것입니다. npm install로 실행을 했을때 문제가 되는 것들을 따로따로 직접 install하는 방법으로 고쳐 해결할수있었습니다.
소스 코드 복사:
COPY . .
소스 코드를 현재 디렉토리로 복사합니다.
포트 노출 및 실행 명령어:
EXPOSE 3000
CMD ["npm", "start"]
포트 3000을 노출하고, 애플리케이션을 실행합니다.
Dockerfile Layers 최적화
RUN 명령어 합치기: 의존성 설치 부분에서 RUN npm install mysql -save와 RUN npm install typeorm -save를 하나로 합쳐서 레이어의 수를 줄일 수 있습니다.
RUN npm install && \
npm install mysql -save && \
npm install typeorm -save && \
npm install bcrypt -save
COPY 위치 최적화: 가능하면 COPY 명령어는 필요한 파일만 복사하도록 최적화합니다.
중간 이미지 캐싱 활용: 중간 이미지를 빌드하여 종속성이 변경되지 않았을 때, 이전 레이어를 캐싱하여 빌드 시간을 단축할 수 있습니다.
마무리
도커는 레이어 기반의 이미지 빌드를 지원하여 이미지의 효율성을 극대화합니다. Dockerfile을 작성할 때, 레이어의 수를 최소화하고 중복된 작업을 피하여 이미지를 최적화하는 것이 중요합니다. 이를 통해 더 효율적인 이미지 빌드와 배포를 달성할 수 있습니다. 🚀
'CS' 카테고리의 다른 글
Docker 🐳 - 1 (0) | 2023.12.05 |
---|---|
통신시 Header, Body (0) | 2023.11.30 |
깊이 우선 탐색 (Depth-First Search, DFS) (0) | 2023.09.15 |
[자료구조] Graph (0) | 2023.09.14 |
[자료구조] Graph - JavaScript (0) | 2023.09.14 |