docker 프로세스 격리

GonnabeAlright·2022년 1월 2일
1
post-thumbnail

컨테이너의 격리 환경 동작 원리

도커의 컨테이너 기술은 리눅스의 컨테이너(LXC)를 활용한 기술로, 컴퓨터에 독립적인 컴퓨팅 공간을 만들어낸다. 이는 기존의 VM(가상머신)과 비교하여 가상환경 구조에 근본적인 차이가 있다. 아래 그림을 보면 좌측의 VM은 환경자체(OS)를 가상화 해버리는 반면, 도커 컨테이너는 호스트 OS의 커널을 공유하며 단순히 하나의 격리되어 있는 프로세스로써 동작한다.

도커는 컨테이너라는 가상의 '격리 환경'을 만들기 위해 리눅스의 namespacecgroup이라는 기능을 사용한다. (namespace와 cgroup으로 만들어진 컨테이너를 LXC라고 부른다.)

  • namespace: 프로세스를 독립시켜주는 가상화 기술이다. 각 컨테이너에서 실행된 프로세스가 시스템(user, 파일, 네트워크, 호스트명, 프로세스)등에 대해 독립할 수 있게 해준다.

  • cgroups: 자원(CPU, 메모리, network bandwidth)에 대한 제어를 가능하게 해주는 리눅스 커널의 기능이다.

namespace

  • 프로세스 별로 리소스 사용을 분리한다.
  • VM에서는 각 게스트 별로 독립적인 공간을 제공하고 충돌하지 않도록 Hardware Resource 자체를 가상화한다.
  • 하지만, namespace의 경우, Hardware Resource 자체를 가상화하는 것이 아니라, Linux 내의 자원을 가상화한다.
  • pid name spaces: 프로세스 격리 처리 (독립된 프로세스 공간 할당)
  • net name spaces: 네트워크 인터페이스
  • ipc name spaces: IPC 자원에 대한 엑세스 관리
  • mnt name spaces: 파일 시스템 포인트 관리
  • uts name spaces: host name 할당

cgroup

  • Control Groups의 약자로 프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리시킬 수 있는 리눅스 커널의 기능이다. namespace와 더불어 도커 컨테이너에서 완벽한 격리 환경을 만드는 데에 쓰이는 중요한 기능이다.

  • cgroup을 이용하면 다음 자원들을 제한할 수 있다.

  • 메모리
  • CPU
  • Network
  • Device
  • I/O

즉, 도커는 프로세스를 격리하고, 프로세스에 필요한 컴퓨팅 자원을 독립적으로 할당/격리하여 완벽히 격리된 가상 환경을 구축하게 해준다.

0개의 댓글