Docker 레이어(Docker Layers)란?
Docker 레이어는 Docker 이미지가 여러 단계의 읽기 전용 계층(레이어)으로 구성된다는 개념을 설명합니다. Docker는 이러한 레이어를 재사용 가능하고 효율적으로 관리하여, 저장 공간을 절약하고 빌드 및 배포 속도를 높입니다.
1. Docker 레이어의 주요 개념
읽기 전용 레이어:
- Docker 이미지는 여러 읽기 전용 레이어로 구성됩니다.
- 각 레이어는 Dockerfile의 명령어 하나(
RUN
,COPY
,ADD
등)에 해당합니다. - 예: 아래 Dockerfile의 각 명령은 레이어를 만듭니다.
FROM ubuntu:latest # 첫 번째 레이어 RUN apt-get update # 두 번째 레이어 RUN apt-get install -y curl # 세 번째 레이어
컨테이너 레이어:
- 컨테이너를 실행할 때 쓰기 가능한 레이어가 생성됩니다.
- 이 레이어는 컨테이너의 상태 변화(파일 생성, 수정, 삭제 등)를 기록합니다.
- 컨테이너가 삭제되면 쓰기 가능한 레이어도 함께 삭제됩니다.
레이어 재사용:
- 동일한 레이어가 다른 이미지에서 사용될 경우, Docker는 해당 레이어를 다시 다운로드하거나 저장하지 않고 캐시를 재사용합니다.
- 예: 같은
ubuntu:latest
를 사용하는 여러 이미지는 같은 베이스 레이어를 공유.
2. Docker 레이어의 구조
베이스 레이어(Base Layer):
- 모든 Docker 이미지는 특정 베이스 이미지(예:
ubuntu:latest
)를 기반으로 시작합니다. - 베이스 이미지는 다른 이미지가 의존하는 가장 아래 단계의 레이어입니다.
- 모든 Docker 이미지는 특정 베이스 이미지(예:
중간 레이어(Intermediate Layers):
- Dockerfile의 각 명령(
RUN
,COPY
,ADD
)은 새로운 레이어를 생성합니다. - 중간 레이어는 읽기 전용 상태로 저장되며, 이미 빌드된 중간 레이어는 다시 빌드되지 않습니다.
- Dockerfile의 각 명령(
최종 이미지(Final Image):
- 모든 읽기 전용 레이어를 합쳐 최종 이미지가 생성됩니다.
- 최종 이미지는 레이어들의 스택으로 볼 수 있습니다.
컨테이너 레이어(Container Layer):
- 컨테이너 실행 시 추가되는 쓰기 가능한 레이어.
- 컨테이너가 삭제되면 해당 레이어도 삭제됩니다.
3. Docker 레이어의 작동 방식
3.1 레이어 생성
- Dockerfile의 명령어 하나가 실행될 때마다 새로운 레이어가 생성됩니다.
- 레이어는 읽기 전용 상태로 저장되며, 새로운 명령어는 이전 레이어 위에 추가됩니다.
3.2 레이어 캐싱
- Docker는 이전에 빌드된 레이어를 캐시로 저장하고, 동일한 명령이 다시 실행될 때 해당 캐시를 재사용합니다.
- 예: 같은
apt-get update
명령이 있으면 이전 레이어를 재사용.
3.3 레이어 결합
- 이미지는 여러 레이어가 결합된 상태로 저장되며, 실행 시에는 레이어들이 투명하게 병합됩니다.
4. Docker 레이어의 장점
효율적인 스토리지 사용:
- 동일한 레이어는 여러 이미지와 컨테이너에서 공유되므로 저장 공간을 절약.
빠른 빌드 속도:
- Docker는 변경된 명령어 이후의 레이어만 다시 빌드하므로, 빌드 시간이 크게 단축.
배포 속도 최적화:
- 변경된 레이어만 전송하면 되므로 이미지 배포 시간이 감소.
유지보수 용이:
- 각 레이어가 명확히 분리되어 있어, 문제를 디버깅하거나 이미지를 수정하기 쉬움.
5. Docker 레이어 관리 명령
레이어 확인
- Docker 이미지의 레이어를 확인하려면:
예:docker history <image-name>
ubuntu:latest
의 레이어 확인docker history ubuntu:latest
- Docker 이미지의 레이어를 확인하려면:
레이어 캐시 삭제
- 불필요한 캐시 레이어를 삭제하려면:
docker system prune
- 불필요한 캐시 레이어를 삭제하려면:
컨테이너 레이어 확인
- 실행 중인 컨테이너의 레이어를 확인하려면:
docker inspect <container-id>
- 실행 중인 컨테이너의 레이어를 확인하려면:
6. Dockerfile 작성 시 레이어 최적화
6.1 레이어 수 최소화
명령어를 합쳐 레이어 수를 줄입니다.
# 비효율적 RUN apt-get update RUN apt-get install -y curl # 최적화 RUN apt-get update && apt-get install -y curl
6.2 불필요한 파일 제거
- 빌드 과정에서 임시 파일이나 캐시를 제거합니다.
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
6.3 캐싱 유효성 관리
- 종속성이 자주 변경된다면 명령 순서를 조정하여 캐시를 유효하게 유지합니다.
COPY requirements.txt /app/ RUN pip install -r /app/requirements.txt
7. 요약
- Docker 레이어는 이미지가 여러 단계로 구성되어 있으며, 읽기 전용 상태로 저장되고 재사용됩니다.
- 레이어 기반 구조는 저장 공간을 절약하고 빌드 및 배포 속도를 최적화합니다.
- 레이어 관리 및 Dockerfile 최적화를 통해 효율적인 컨테이너 환경을 구축할 수 있습니다. 😊
'Docker' 카테고리의 다른 글
도커 인 액션 3장 (0) | 2024.12.04 |
---|---|
ext4 (Extended Filesystem 4) (1) | 2024.12.04 |
Root 파일 시스템(root filesystem) (1) | 2024.12.04 |
scratch (0) | 2024.12.04 |
Surface Area (1) | 2024.12.04 |