본문 바로가기

CS

Docker 🐳 - dockerfile layer

도커는 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있는 강력한 도구입니다. 

이번 블로그에서는 도커의 핵심 개념 중 하나인 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