반응형

Docker 이미지와 컨테이너가 작동하는 방식을 이해하고 계층화된 파일 시스템의 컨셉에 대해 알아보도록 하겠습니다.

 


Layers, 계층화된 파일 시스템

우리가 좋아하는 디저트중 하나인 파르페는 Layer를 잘 보여주는 예입니다.

파르페의 각 층에는 각기 다른 디저트 들이 들어있는 걸 볼 수 있습니다. 제일 밑에 기본 레이어(디저트)가 있고 그 위로 하나씩 레이어를 쌓아 올려서 맨 위의 디저트까지 얹혀있습니다.

이러한 레이어는 Docker 이미지 또는 컨테이너와 어떤 관계가 있을까요?

디저트의 레이어 대신 서로 겹쳐 있는 파일 레이어를 연상해 보세요. Docker 이미지와 컨테이너는 실제로 이러한 계층화된 파일 시스템으로 만들어 집니다. 계층화된 파일 시스템을 사용하면 디스크 공간을 절약할 수 있으며, 재사용에 유용합니다. 이미지를 살펴보고 이러한 레이어가 이미지에서 어떻게 작동하는지 살펴보겠습니다.

 

이미지, 컨테이너의 파일 레이어

아래 우분투 이미지로 예를 들어보겠습니다. 아래 우분투는 Docker Hub에서 파일을 가져왔고 여러 레이어로 이뤄져 있습니다.

이미지내에서 파일 시스템을 구성하는 레이어는 모두 읽기 전용입니다. 컨테이너화 된 이미지에는 아무것도 파일에 쓸 수 없습니다. 즉 이미지는 하드 코딩된 파일들을 가지게 됩니다. 파일을 써야 하는 데이터베이스의 이미지가 있는 경우는 뭔가 제한이 있는 것처럼 생각될 수 있습니다. 우리는 때때로 로그 파일을 만들어야 하고 컨테이너가 실행될 때 바꿀 수 있는 소스코드를 가지고 있어야 합니다.

다행히 도커의 이미지와 파일 시스템은 읽기 전용이지만, 컨테이너 위에 빌드되어 자체의  얇은 읽기 쓰기 레이어를 얻게 됩니다.

실제로 컨테이너와 이미지 사이의 주된 구분 요소 중 하나입니다. 이미지는 읽기 전용 레이어의 세트이지만, 컨테이너에게는 얇은 읽기 쓰기 레이어가 있습니다. 해당 컨테이너가 삭제되면 쓰기 가능한 레이어도 삭제됩니다. volume 이라는 것을 사용하게 할 수도 있지만, 지금 당장은 컨테이너에서는 로그 파일을 만들거나 데이터베이스 파일을 만드는 것이 가능하다는 걸 기억해 두세요.

 

이미지 레이어의 공유

이미지에서 사용하고 있는 파일 계층은 디스크 공간 및 재사용 관점에서 효율적입니다. 우분투 이미지를 사용하여 여러 개의 컨테이너를 만든다면 이 이미지는 다른 컨테이너에서 공유될 것입니다.

전체 파일 시스템의 복사본을 만들 필요가 없어지기 때문에 디스크 공간을 효율적으로 사용하게 됩니다.

예를 들어 ab로 시작하는 Ubuntu의 맨 아래의 특정 파일 레이어를 다른 이미지에 사용된다면 파일이 이미 감지되어 있을 것이고 다시 다운로드할 필요가 없어지게 됩니다. 단지 이미지들 사이에서 파일 레이어를 공유하게 됩니다.

여기에 생성된 각 컨테이너의 경우 고유한 읽기 쓰기 계층이 존재하므로 각각 데이터베이스 파일을 고유하게 저장할 수 있습니다. 그러나 언급 한 바와 같이 컨테이너를 지우면 읽기 쓰기 계층이 지워지게 됩니다.


여기까지 읽어주셔서 감사합니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기