• toc {:toc}

Virtualization

  • 자바 가상머신

  • 내가 코딩한 프로그램이 어떤 운영체제에서도 돌아갈 수 있도록 만들고 싶었다.

  • 코딩을 한 프로그램을 가짜 기계어로 만들고, 가짜 기계어를 각 운영체제에서 이해할 수 있는 툴을 만들면서 어떤 운영체제에서도 돌아갈 수 있도록 만들었다.

  • 가상화(Virtualization) : 어떤 것의 가상의 버전을 만드는 행위.

    • 종류 : 소프트웨어, 메모리, 스토리지, 데이터, 네트워크
    • 역할
      • 하나의 컴퓨터에서 여러 운영체제 인스턴스가 동시에 실행될 수 있도록 한다.
      • 하드웨어를 운영체제로부터 분리하는 수단.
      • 실제로는 물리적인 하드웨어를 나누어 사용하는 것이지만 가상머신의 입장에서는 할당 받은 하드웨어가 실제 하드웨어라고 생각한다.
  • Hypervisor Virtualization

  • Hypervisor는 호스트 머신에 다수의 가상머신들을 실행할 수 있고 각 가상머신에 Guest OS를 올릴 수 있다.

  • Host OS 위, 하드웨어 위에 Hypervisor를 올리는 2가지 타입으로 나누어진다.

  • Type1 - Hardware

    • 하드웨어 위에 직접 Hypervisor를 올려 구현할 수 있도록 한다.
  • Type2 - Host OS

    • 하드웨어 위에 Host OS를 올리고 Host OS 위에 Hypervisor를 올린다.
  • Virtual Machine Monitor : VMs를 만들고 실행시키는 과정

  • 장점

    • 비용의 효율성 : 각 물리적 하드웨어를 여러 VM의 것으로 나누어 사용한다.
    • 규모 설정이 쉽다 : VM을 만드는데 드는 시간이 짧다.
  • 단점

    • 각 VM은 OS 전체를 포함하기 때문에 많은 용량을 차지한다.
    • VM은 부팅이 느리다.
  • Guest Linux OS over Host Linux OS 문제

    • 데이터 센터에서 리눅스가 무료이기 때문에 Host OS로 리눅스 사용한다.
    • 클라우드에서 사용자를 위해 여러 환경을 위해 VM을 사용하는 경우가 많은데, Guest OS의 경우에도 리눅스를 사용하면서 중복된 운영체제를 갖게 된다.
    • 즉, 중복된 운영체제를 갖는다는 것은 더 많은 비용을 사용한다는 것이다.
    • 결국, 굳이 VM을 고집할 필요 없이, 내가 원하는 만큼의 CPU, 스토리지, 네트워크를 가져오면 되는 일이다.
  • 리눅스 컨테이너

  • 과거 유닉스 컴퓨터는 비쌌기 때문에 하나의 컴퓨터를 여러 명이 사용하는 방식으로 사용했다.

  • 유닉스를 이은 리눅스는 이에 따라 일시적으로 Guest를 열어서 그 안에서 작업하고 삭제하면 이전의 설정값과 동일한 형태가 된다.

  • 필요할 때 설치하고 필요하지 않을 때 삭제하면 깔끔하게 삭제된다.

  • 컨테이너

  • App 구동을 추상화해준다. 즉, 프로그램 코드, 기타 라이브러리 등을 함께 패키지로 묶은 것이다.

  • Host OS 커널을 공유하여 사용한다.

  • 컨테이너 각각은 사용자 공간에서 독립된 프로세스로 동작한다.

  • 장점

    • VM 보다 훨씬 용량이 적다.
    • OS 커널을 공유한다.
    • 가볍기 때문에 시작이 더 빠르다.
  • 가상 머신 VS 컨테이너

image

  • 작은 리눅스 OS를 Docker가 가지고 있고 그 위에서 여러 개의 컨테이너를 실행시킬 수 있다.