[Docker] VM vs Container, Docker Namesapce

Hoon·2022년 8월 18일
0

Docker

목록 보기
2/13
post-thumbnail

가상화: 컴퓨터 시스템에서 물리 리소스를 추상화 한 것

Bare Metal vs 가상머신 vs 컨테이너

  • Bare Metal(가상화 타입1): 애플리케이션이 OS 위에 직접 배포된다
    • 하이퍼바이저가 하드웨어를 직접 제어하고 그 위에 운영체제를 올리는 방식.
    • 베어메탈 하이퍼바이저는 자신만의 디바이스 드라이버를 가지고 입출력, 프로세싱, OS 관련 컴포넌트들과 직접 교류하여 처리함.
  • 가상머신(가상화 타입2): 하이퍼바이저를 이용하여 가상서버를 구축하고 해당 서버위에 애플리케이션이 배치되는 형태로 가사머신은 각자의 커널을 갖는다. 실제로 애플리케이션이 동작하기 위해서는 guest os -> 커널 -> 하이퍼바이저 -> 커널 -> 물리자원을 거쳐야 하므로 성능저하가 발생한다.
  • 컨테이너: 리소스가 격리된 프로세스. 컨테이너는 자신이 속한 OS의 커널을 직접 사용하므로 성능저하가 거의 없다. 하나의 OS 상에서 여러 개를 동시에 가동할 수 있으며, 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용할 수 있다.
  • 사용자 입장에서는 애플리케이션이 VM에서 동작하든 Container에서 동작하든 관심 없다. 빠른 처리 속도만을 요구한다. 최근에는 많은 애플리케이션이 잦은 i/o를 요구하므로 컨테이너를 이용하는 추세이다.

Docker

  • Docker: Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있다.
  • 도커는 리눅스에서 사용하던 기술인 namespace(프로세스 자원관리)와 cgroup(Control Groups. 컴퓨팅 자원들을 제한하고 격리시킬 수 있는 리눅스 커널 기능)을 이용하여 개발되었다.

Namespace

  • linux Namespace: 프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능. 한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행된다. 이를 단일 네임스페이스라고 볼 수 있다.

도커의 name space는 아래의 linux name space에서 차용

  1. user namespace: 사용자 또는 그룹별 격리
  2. UTS(unix time-sharing) namespace: 응용프로그램 입장에서 호스트명과 도메인에 대한 분리된 가시성을 제공
  3. 마운트 네임스페이스: 프로세스에서 마운트된 파일시스템에 대한 가시성을 제공하기 위해 자신만의 마운트 네임스페이스를 사용할 수 있다. (각각의 컨테이너에서 별도의 호스트 디렉토리를 마운트 할 수 있다)
  4. PID 네임스페이스: Process ID는 호스트상의 다른 응용프로그램으로부터 격리 될 수 있다. 이를 통해 동일한 애플리케이션이 동시에 2개 이상 동작하는 것도 가능하다.
  5. 네트워크 네임스페이스: 네트워크 인터페이스, 라우팅 테이블등에 대한 격리 가능하다.

namespace 활용
일반 리눅스에서의 namespace

  • httpd | ftp | nfs

도커에서의 namespace

  • 컨테이너(1111) | 컨테이너(1112) | 컨테이너(1113) 각각의 컨테이너 ID로 구분

k8s에서의 namespace

  • 각 사용자별로 별도의 작업 공간을 제공
  • 리눅스의 user namespace는 다른 유저도 사용가능하지만 k8s에서는 별도의 공간으로 인식하는 것.

Reference

0개의 댓글