logoRawon_Log
홈블로그소개

Built with Next.js, Bun, Tailwind CSS and Shadcn/UI

Docker

Docker - 레이어 관리

Rawon
2025년 9월 22일
목차
Layer 관리

Layer 관리

Docker 이미지 관련 포스팅을 보면 이미지는 레이어로 구성되어 있다는걸 알 수 있습니다.

이미지를 빌드할 때 레이어는 Dockerfile 에 작성된 지시어 하나당 레이어가 한개 추가됩니다.

그렇기에 불필요한 지시어가 많아지면 레이어도 그만큼 증가하고 이미지 크기가 늘어남에 따라 빌드 속도가 느려질 수 있습니다.

그래서 레이어는 꼭 필요한 레이어만 추가하는 것이 좋습니다.

레이어의 갯수를 관리하는 대표적인 케이스는 RUN 지시어를 사용하는 것 입니다.

RUN 지시어는 컨테이너 레이어 안에서 특정 명령을 실행하는 지시어 입니다.

리눅스에서는 && 를 활용해 여러 개의 명령어를 하나로 처리할 수 있는데

그러면 RUN 지시어를 한번만 사용하면서도 결과적으로는 같은 상태의 이미지를 만들 수가 있습니다.

아래는 잘못된 RUN 지시어 사용 사례입니다.

docker
FROM ubuntu:latest

RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y xz-utils
RUN apt-get install -y git
RUN apt-get clean

위 사례는 각각의 명령어마다 RUN 지시어를 사용함으로서 이미지에는 기존 레이어에 5개 레이어가 추가되므로 잘못된 사례입니다.

반대로 && 명령어를 사용한 좋은 예시는 아래와 같습니다.

docker
FROM ubuntu:latest
RUN apt-get update && \
    apt-get install -y curl && \
    apt-get install -y xz-utils && \
    apt-get install -y git && \
    apt-get clean

이처럼 지시어를 각각 사용하는 것보다 &&를 활용함으로서 이미지 레이어의 갯수를 1개로 줄일 수 있습니다.

💡 이미지 사이즈 관리
이미지 크기가 작으면 배포 속도와 네트워크 사용량에 이점이 있는데

레이어 관리 외에도 이미지 사이즈를 줄일 수 있는 방법들이 있습니다.

  1. 애플리케이션의 크기를 가능한 작게 관리
  2. 베이스 이미지는 가능한 작은 이미지를 사용 alpine OS 같은
  3. .dockerignore 파일을 사용하여 불필요한 파일 제거 (dockerignore 파일리스트는 빌드 컨텍스트에 전달하지 않음)

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/CigvZ

목차

Layer 관리