Container

ᄒᄉᄒ·2023년 1월 20일

Container

Container는 격리된 Process이다.

Container에는 Layer들이 있다.
읽기/쓰기 전부 각각 하나의 Layer가 된다.

Layer들을 쌓아서 Commit 하면 하나의 Image가 되는데
Layer 하나가 Image가 될 수도 있고 여러 개가 될 수도 있다.

Docker = Namespace + Union FS

Namespace로 격리가 가능하고 Union FS로 여러 개의 layer들을 합쳐서 사용 가능하다.

Namespace로 격리하면 같은 포트를 Container가 다르면 같이 쓸 수 있고 Cgroup을 써서 성능 제한을 걸 수도 있다.

Namespace

아래 기준으로 Container를 독립시킬 수 있다.

  • pid(프로세스 ID): 독립적인 프로세스 공간 할당
  • net(네트워크): namespace 안의 네트워크 충돌 방지(중복 포트 바인딩 등)
  • ipc(SystemV IPC): 프로세스 간의 독립적인 통신 통로 할당
  • uts(hostname): 독립적인 호스트명 할당
  • user(UIP): 독립적인 사용자 할당
  • mnt(파일시스템 마운트): 호스트 파일시스템에 구애받지 않고 독립적으로 파일시스템을 마운트하거나 언마운트 가능
    -Union Mount(= Union File System)
    :여러 파일 시스템을 하나의 파일 시스템으로 합치다보면 중복 파일 발생
    이 경우 나중에 마운트된 파일로 덮어쓴다.
    도커 이미지에서 레이어는 각가의 파일 시스템을 겹쳐놓은 형태와 유사하다.

Cgroup(Control Group)

보통 OS가 각 프로세스에 대한 자원을 통제한다(작업관리자).
하지만 cgroup을 쓰면 각 ps에 얼마를 줄지 정할 수 있다.
이렇게 할당하면 격리된 효과를 줄 수 있다.

0개의 댓글