이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.


이미지 레이어(Image Layer)

Docker 이미지는 여러 개의 읽기 전용 레이어로 구성되어 있다. 각 레이어는 하나의 명령어(예: RUN, COPY 등)가 실행될 때마다 생성된다.

예를 들어, Dockerfile에서 각 명령어를 실행할 때마다 새로운 레이어가 만들어지며, 이런 레이어들이 쌓여서 하나의 Docker 이미지를 형성한다. 이때 각 레이어는 변경된 부분만 저장되므로, 이미지가 효율적으로 관리될 수 있다.

  • 읽기 전용(Read-only): 이미지를 구성하는 레이어들은 모두 읽기 전용이다. 즉, 이미지를 실행하면서 이 레이어들을 변경할 수 없다.
  • 레이어의 중복 방지: Docker는 이미지의 레이어를 캐시로 저장하고, 동일한 레이어가 다른 이미지에서도 사용되면 이를 재사용함으로써 저장 공간과 네트워크 대역폭을 절약한다.

 

 

 

이미지 레이어와 컨테이너 레이어(Container Layer)

컨테이너는 이미지 위에 쓰기 가능한(read-write) 레이어가 추가된 형태이다.

즉, Docker 컨테이너를 실행하면 해당 컨테이너는 이미지의 읽기 전용 레이어 위에 하나의 쓰기 가능한 레이어가 더해져, 그 레이어에서 데이터의 변경이 발생한다.

  • 쓰기 가능(Read-write): 컨테이너 레이어에서는 파일을 생성, 수정, 삭제할 수 있다. 하지만 이 레이어에서의 변경 사항은 원본 이미지에 영향을 주지 않는다.
  • 임시적: 컨테이너 레이어는 일시적이다. 컨테이너가 삭제되면 이 레이어에서 이루어진 모든 변경 사항도 사라진다. 따라서 지속적으로 보관해야 할 데이터는 별도의 볼륨(Volume)을 사용해야 한다.

 

요약

  • 이미지 레이어는 여러 개의 읽기 전용 레이어로 구성되어 있으며, Docker 이미지를 생성할 때 각 명령어마다 하나의 레이어가 추가된다.
  • 컨테이너 레이어는 이미지 위에 추가되는 쓰기 가능한 레이어로, 컨테이너 실행 중에 발생하는 데이터 변경을 저장하지만, 일시적이다.
  • Layering : 각 레이어는 이전 레이어 위에 쌓이며, 여러 이미지 간에 공유될 수 있다. 레이어 방식은 중복 데이터를 최소화하고, 빌드 속도를 높이며, 저장소를 효율적으로 사용할 수 있게 해준다.
  • Copy-on-Write (CoW) 전략 : 다음 레이어에서 이전 레이어의 특정 파일을 수정 할 때, 해당 파일의 복사본을 만들어서 변경 사항을 적용한다. 이렇게 함으로써 원래 레이어는 수정되지 않고 그대로 유지된다.
  • Immutable Layers (불변 레이어) : 이미지의 각 레이어는 불변으로, 한 번 생성되면 변경되지 않는다. 이렇게 함으로써 이미지의 일관성을 유지하고, 여러 컨테이너에서 안전하게 공유할 수 있다.
  • Caching (캐싱) : 레이어를 캐시하여, 이미 빌드된 레이어를 재사용할 수 있다. 이는 이미지 빌드 시간을 크게 줄여주며, 같은 레이어를 사용하는 여러 이미지에서 효율적으로 작동한다.

 

 

'Cloud > Docker' 카테고리의 다른 글

[Docker] Stateless 와 Volume  (1) 2024.09.12
[Docker] 도커 네트워크  (0) 2024.09.11
[Docker] SpringBoot + MySQL 컨테이너화  (1) 2024.09.08
[Docker] 이미지 레지스트리  (3) 2024.09.07
[Docker] 이미지와 컨테이너  (0) 2024.09.06