도커파일 최적화

greenTea·2023년 12월 21일
0

도커 이미지의 최적화는 배포 속도 개선, 보안 강화 및 유지 관리의 용이성에 큰 영향을 미칩니다. 다음은 몇 가지 주요 도커 이미지 최적화 전략과 예제 코드입니다.

1. 불필요한 바이너리 파일 제거 🗑️

.dockerignore 파일 사용

.dockerignore 파일을 사용하면 빌드 컨텍스트에서 제외할 파일이나 디렉토리를 지정할 수 있습니다. 이를 통해 이미지 크기를 줄이고 빌드 속도를 높일 수 있습니다.

.dockerignore 예시:

*.log
*.tmp
node_modules/

rm -rf 명령어 사용

빌드 과정에서 필요하지 않은 파일이나 디렉토리를 삭제합니다.

Dockerfile 예시:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y package-name \
    && rm -rf /var/lib/apt/lists/*

이를 통해 최종적으로 이미지의 크기를 줄임과 동시에 불필요한 라이브러리나 파일들을 제거함으로써 보안적인 측면에서도 효과를 볼 수 있습니다.

2. 경량화된 베이스 이미지 사용하기 🏋️‍♂️

Alpine, Slim 이미지

경량화된 베이스 이미지를 사용하면 전체 이미지 크기를 상당히 줄일 수 있습니다.

Alpine을 사용한 Dockerfile 예시:

FROM python:3.8-alpine
RUN pip install flask
CMD ["python", "app.py"]

단, 위 이미지의 경우 최소한의 필요 파일들만을 갖기에 의존성 문제가 발생할 수 있습니다. 자신에게 맞는 이미지를 선택하는 것이 중요합니다.

3. Multi-Stage Build 🏗️

Multi-Stage Build를 사용하면 최종 이미지에서 빌드 도구나 중간 파일을 제거할 수 있어 이미지 크기를 최소화합니다.

Multi-Stage Build 예시:

# 빌드 스테이지
FROM node:12 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 실행 스테이지
FROM nginx:alpine
COPY --from=build-stage /app/build /usr/share/nginx/html

빌드 스테이지를 통해 필요한 파일들을 생성(빌드)하고 해당 파일들만을 최종 이미지에 가져옴으로써 이미지의 크기를 줄일 수 있습니다.

4. 레이어 수 최소화 📉

레이어 수를 최소화하면 이미지 크기와 레이어 관리의 복잡성을 줄일 수 있습니다.

레이어 최소화 예시:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y \
    package1 \
    package2 \
    && rm -rf /var/lib/apt/lists/*

FROM, RUN 등의 명령어들은 하나의 레이어를 구축하게 되는데, 여러 개의 레이어로 나누는 것보다는 하나의 레이어로 묶음으로써 관리를 더욱 용이하게 할 수 있습니다.

5. 캐시 사용 최적화 🔄

도커파일의 경우 동일한 명령어의 경우 캐싱을 통해 재사용을 하게 됩니다

그러므로 변경이 적은 명령어들을 상단에 배치하게 된다면 캐시의 효과를 크게 볼 수 있습니다.

Dockerfile 예시:

FROM python:3.8-slim

COPY requirements.txt /app/
WORKDIR /app
RUN pip install -r requirements.txt

COPY . /app

CMD ["python", "app.py"]

위와 같은 상황에서 COPY requirements.txt /app/라는 명령어가 변경되면 해당 명령줄 아래의 명령들은 모두 다시 빌드되어야 합니다. 따라서 변경이 잦은 부분은 아래로 내려 주는 것이 좋습니다.

위 방법들을 통해 효율적인 도커 이미지를 구축하여 더 빠른 배포, 간소화된 관리등을 할 수 있습니다.

패스트캠퍼스 - 한 번에 끝내는 CI/CD Docker부터 GitOps까지

profile
greenTea입니다.

0개의 댓글