ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Docker] Docker와 기존 가상화 기술의 차이 알아보기
    DevOps/Docker 2021. 3. 29. 14:29
    728x90
    반응형

    Docker와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해하기

    • 가상화 기술 나오기 전

      • 한대의 서버를 하나의 용도로만 사용
      • 남는 서버 공간 그대로 방치
      • 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영
      • 안정적일 수 있지만 비효율적
    • 하이퍼 바이저 기반의 가상화 등장

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

    스크린샷 2021-03-29 오전 9 53 25

    현재 많이 사용하는 VM의 구조는 위와 같습니다. 기존 OS 위에서 하이퍼 바이저를 사용하는 방식입니다. (윈도우 PC에서 VMware 설치한 후에 거기에 ubuntu OS를 설치한다면 위와 같은 구조라고 생각하면 될 거 같습니다.)

     

    스크린샷 2021-03-29 오전 9 56 00

    다른 그림으로 표현하면 위와 같이 표현할 수 있습니다. 하이퍼바이저 아래에 기존 OS가 존재하고 그 위에 Guest OS가 존재하는 것을 볼 수 있습니다.

    하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받습니다.논리적으로 분리 되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.

     

    Docker는 하루 아침에 갑자기 나온 것이 아니라 이러한 기술들을 토대로 나온 것입니다.

     

     

     

    가상화 기술에서 나온 컨테이너 가상화 기술

    스크린샷 2021-03-29 오전 10 01 27

    둘의 구조가 많이 비슷한 것을 볼 수 있습니다. 하지만 도커하이퍼바이저Guest OS가 필요하지 않으므로 더 가볍습니다.(OS 자체는 많이 무거움)

     

    즉, 정리하면 아래와 같습니다.

    • Docker: 어플리케이션을 실행할 때는 컨테이너 방식에서는 Host OS 위에 애플리케이션의 실행 패키지인 이미지를 배포하기만 하면 됩니다.
    • VM: VM은 어플리케이션을 실행 하기 위해서 VM을 띄우고 자원을 할당한 다음, 게스트 OS를 부팅하여 어플리케이션을 실행 해야 해서 훨씬 무겁고 복잡하게 실행해야 합니다.
    • 공통점: 도커 컨테이너와 가장 머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법입니다.
    • 차이점: 가장 큰 차이점은 격리된 환경을 얼마나 격리를 시키는지의 차이

     

     

    Docker 컨테이너

    도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다. (하나의 OS에 이미지를 다운 받아 사용하기 때문에)
    결과적으로 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있다. (Docker ps 명령어로 프로세스 확인 가능)

     

     

    가상머신

    가상머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영체제 또는 하이퍼바이저와 독립되어 있다. 가상 머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해
    프로세스를 시작하고, 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당한다. 또한 시작 시간에 VM 환경을 위해 새롭고 이 특정 VM만을 위한 커널을 부팅하고 운영체제 프로세스 세트를 시작한다는 것이다.
    (오버헤드가 커서 굉장히 느리다.)
    
    비교적 사용방법은 간단하다는 장점이 있다. 

     

     

    Docker 컨테이너의 예시

    스크린샷 2021-03-29 오전 10 11 49

    위와 같이 컨테이너커널은 공유하고 나머지 CPU, 메모리, 하드디스크는 컨테이너 안에 다 격리되어 있습니다.

     

     

    컨테이너들을 격리시키는데 어떻게 해서 격리시킬 수 있을까요?

    먼저 리눅스에서 쓰이는 CGroup네임스페이스(namespaces)에 대해서 알아야 합니다. 이것들은 컨테이너와 호스트에서 실행되는 프로세스 사이에 벽을 만드는 리눅스 커널 기능들입니다.

    • C Group: CPU, 메모리, Network, HD I/O 등 프로세스 그룹의 시스템 리소스 사용량을 관리
      • 어떤 애플리케이션 사용량이 너무 많다면 그 어플리케이션 같은 것을 C Group에 집어 넣어서 CPU와 메모리 사용 제한 가능 (필요한 만큼만 할당해줌)
    • 네임스페이스: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술(별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술)

    이러한 Docker 컨테이너 기술들이 갑자기 나온 것이 아니라 VMLinux 기반의 기술들을 사용해서 나온 것입니다.

     

     

    Docker 환경에서 C-Group, 네임스페이스를 사용할 수 있는 이유

    C-Group네임스페이스Linux 환경에서 사용되는 것인데 현재 저는 MacOS를 사용하고 있습니다. 그런데 어떻게 사용할 수 있을까요?

    스크린샷 2021-03-29 오전 10 32 46

    위와 같이 docker version을 보면 linux인 것을 볼 수 있습니다.

     

    스크린샷 2021-03-29 오전 10 35 26

    실제로 좀 더 그림을 구체화 시켜보면 위와 같이 되어 있습니다. 즉, Docker 클라이언트Docker 서버linux로 되어 있습니다.

    반응형

    댓글

Designed by Tistory.