Tools/Docker

<Docker> 레이어

dataart 2024. 10. 12. 16:27

# 레이어

도커의 이미지는 하나의 파일이 아닌 여러개의 레이어로 구성되어있다.

소프트웨어나 전자기기 생산 공정을 생각해보면, 대부분의 기능이 같지만 딱 하나의 기능만 다른 경우를 볼 수 있다. 

이런 생산 공정에서는 '모듈' 이라는 재사용성이 높은 부품들을 모아 조립하고, 달라지는 기능 부분만 추가하는 방식이 일반적이다.

 

도커의 이미지 레이어는 앞서 말한 '모듈'에 비유될 수 있다. 즉, 이미지를 여러개 생성하더라도 동일한 기능을 하는 레이어는 재사용된다.

예를 들면, 이미지 A와 B는 같은 환경의 같은 소프트웨어에서 같은 코드를 실행하지만 출력문구만 다르다고 생각해보자.

그럼 레이어는 OS, 소프트웨어 설치, 소프트웨어 설정, 코드 실행, 출력문구 레이어로 구성되는데,

출력문구 외 나머지 레이어는 같은 레이어를 재사용함으로써 이미지가 구성되는 것이다.

 

# 레이어 시스템의 장점

여러 이미지를 생성할 때 같은 기능을 하는 레이어는 재사용할 수 있기때문에, 

저장공간이나 네트워크를 효율적으로 사용할 수 있다.

예를 들어 이미지 A를 생성했다고 했을 때, 기능이 하나만 다른 이미지 B를 추가로 생성한다면

기존에 존재하는 레이어들을 다시 사용하므로, 저장공간은 기능이 다른 부분의 레이어만 추가로 저장하면 된다.

그리고 이미지를 공유할 때에도, 이미지 A를 가진 사람에게 이미지 B를 전달해야 할 경우

기능이 다른 부분의 레이어만 전달하면 되기때문에 네트워크용량을 줄일 수 있다.

 

# 이미지 레이어와 컨테이너 레이어

  • 이미지 레이어
    • 이미지 레이어는 기존 레이어를 수정하는 것이 아니라, 기존 레이어 위에 새로운 레이어를 저장하는 것이다.
    • 예를 들어, 앞서 든 예시에서 처음 갖고있던 이미지에 OS 레이어만 존재한다고 가정해보자.
      해당 이미지에서 소프트웨어 설치를 추가할 경우, OS 레이어가 수정되는것이 아니고,
      OS 레이어 위에 소프트웨어 설치 레이어가 추가되는 것이다.
    • 각 레이어는 더이상 수정되지 않는 특징 때문에, 이미지 레이어는 '읽기 전용 레이어'가 되며,
      한번 생성된 이미지는 변경되지 않는 특징을 갖게 된다.
  • 컨테이너 레이어
    • 컨테이너 레이어는 이미지로 컨테이너를 실행시킬 때 추가되는 레이어이다.
    • 이미지 레이어가 save point로써 기본적인 프로세스 실행환경 세팅이고, 컨테이너 레이어는
      기본적인 프로세스 실행환경 위에서 컨테이너만의 고유한 작업을 수행하고 그 값을 저장하는 레이어이다.
    • 따라서, 컨테이너 레이어는 '읽기/쓰기 레이어'가 되며, 각 컨테이너마다 갖는 컨테이너 이미지는 모두 다르다.
    • 예를 들어, 이미지 A로 컨테이너 1과 컨테이너 2를 실행할 경우, 모든 컨테이너는
      OS/소프트웨어설치/설정/출력문구 까지는 동일하지만, 컨테이너 실행 이후 행해지는 작업에 대해서는
      각각의 컨테이너에서만 그 레이어를 갖고있는 것이다.
    • 비유하자면, Github의 main 또는 develop 브랜치(이미지레이어)로부터 여러 사람이 각각의 작업 브랜치(컨테이너레이어)로
      분기시켜 작업하는 것이다.
반응형