[Virtualization]Docker

ssh00n·2023년 4월 21일
0

도커와 기존의 가상화 기술과의 차이

가상화 기술이 나오기 전

  • 한대의 서버를 하나의 용도로만 사용 → 남는 서버 공간 그대로 방치
  • 하나의 서버에 하나의 OS, 하나의 Program만을 운영 → 안정적 But 비효율적

하이퍼바이저 기반의 가상화 출현

  • 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능
  • 하이퍼바이저는 호스트시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 S/W
  • H/W를 가상화하면서 H/W와 각각의 VM을 모니터링하는 중간 관리자이다.

하이퍼바이저

네이티브 하이퍼바이저

  • 하이퍼바이저가 H/W를 직접 제어하므로 자원 효율적으로 사용 가능하며, 별도의 호스트 OS가 없으므로 오버헤드가 적다.
  • 하지만 여러 H/W 드라이버를 세팅해야하므로 설치 어렵다.

호스트형 하이퍼바이저

  • 일반적인 S/W 처럼 호스트 OS위에서 실행되며, H/W 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식으로, 오버헤드가 크다
  • 하지만 게스트 OS 종류에 대한 제약이 없고 구현이 다소 쉬워 일반적으로 많이 이용하는 방법

공통점

  • 도커 컨테이너와 가상머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법

차이점

→ 격리된 환경을 얼마나 격리를 시키는지의 차이
  • VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트OS가 필요하지 않으므로 더 가볍다
  • 어플리케이션을 실행할 때 컨테이너 방식에서는 호스트 OS위에 어플리케이션의 실행 패키지인 이미지를 배포하기만 하면 되는데 VM은 어플리케이션을 실행하기 위해서 VM을 띄우고 자원을 할당한 다음, 게스트 OS를 부팅하여 어플리케이션을 실행해야 해서, 훨씬 복잡하고 무겁게 실행하게 됨

도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다.

결과적으로, 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템(모든 프로세스를 나열할 수 있는 충분한 권한 있음)에서 볼 수 있다.

How?

먼저 리눅스에서 쓰이는 Cgroup(control groups)과 네임스페이스(namespaces)에 대해 알아야 한다

이것들은 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들이다.

C Group

  • CPU, 메모리, Network Bandwidth, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리 → 어떤 어플이 사용량이 너무 많다면 그 어플을 C group에 집어 넣어 CPU와 메모리 사용 제한 가능

Namespaces

  • 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술 → 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술

C-group, 네임 스페이스를 도커 환경에서 쓸 수 있는 이유

  • 리눅스 커널, VM을 사용하기 때문

이미지로 컨테이너 만들기

  • 이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있음

    • 컨테이너가 시작될 때 실행되는 명령어 ( ex. run kakaotalk )

    • 파일 스냅샷 ( ex. 컨테이너에서 카카오톡을 실행하고 싶다면, 카카오톡 파일 스냅샷

      ( 파일 스냅샷은 디렉토리나 파일을 copy 한 것 )

profile
Whatever I want

0개의 댓글