가상화에는 크게 서버 가상화와 네트워크 가상화 두 가지가 있다.
물리 서버 하나에 가상 서버를 여러 대 구축하는 기술


호스트 OS : 하드웨어에 직접 설치하는 OS
게스트 OS : 가상 하드웨어에 설치하는 OS
물리 서버에 설치된 호스트 OS에서 가상 서버가 동작
ex) 맥OS에서 윈도우가 동작 혹은 윈도우에서 리눅스를 동작
가상 서버안에 애플리케이션 여러 개를 동작시킬 수 있다.
ex) 상업용 호스트 OS형 가상화 소프트웨어: 오라클 - 버추얼박스, VMware 등

하이퍼바이저 : 하드웨어의 물리적인 리소스들을 가상머신(VM)들에게 제공하고 VM과 하드웨어간의 I/O 명령을 처리
호스트 OS 없이 동작하는 가상화 소프트웨어(하이퍼바이저)가 대행
호스트 OS 불필요
호스트 OS 대신 하이퍼바이저를 물리 서버에 설치
비교적 규모가 큰 가상 환경을 구축하는데 사용
호스트 OS 없이 게스트 OS를 직접 제어하기 때문에 컴퓨터의 리소스를 활용하기 쉽다.
호스트 OS가 없어서 유지 보수가 더 쉽다.

컨테이너라는 애플리케이션과 실제 환경을 같이 분리하는 원리를 사용해 OS 단위가 아닌 애플리케이션 단위로 가상화한다.
컨테이너형 가상화는 게스트 OS를 사용하지 않고 호스트 OS에 컨테이너형 가상화 소프트웨어를 설치한다.
사용 리소스가 낮고 유연성이 높아 웹 애플리케이션 운영에 최적화되어 있다.
다른 서버 가상화 기술로 가상 서버를 늘리는 경우에는 게스트 OS 및 응용 프로그램을 설치해야 하지만, 컨테이너형 가상화에서는 컨테이너를 만들고 거기에 애플리케이션을 도입하기만 하면 된다.
컨테이너에는 여러 애플리케이션이 담길 수는 있지만, 원칙적으로는 하나의 컨테이너에 하나의 애플리케이션(하나의 프로세스)이 이상적이다.
컨테이너는 만들기 쉽기 때문에 복잡하고 큰 컨테이너를 만드는 것보다 작은 컨테이너 여러 개를 만드는게 더 효율적이다.
ex) 하나의 컨테이너 안에 Apache(웹 서버), PHP(AP 서버), MySQL(DB 서버) 있는 것보다 여러 개의 컨테이너로 분산시키는게 효과적이다.
대표적인 컨테이너형 가상화 = 도커(Docker)
AWS의 하이퍼바이저 가상화로 S3(Simple Storage Service)와 함께 사용할 수 있다.
사용 목적에 따라 최적의 가상 시스템 사양(인스턴스 유형)을 선택할 수 있다.
가상 머신으로 사용할 수 있는 OS 유형은 아마존 리눅스(아마존이 자체 개발한 리눅스 OS), CentOS, 데비안, 윈도 서버 등이 있다.