가상화는 물리적인 하드웨어(HW) 장치를 논리적인 객체로 추상화 하는 것을 의미합니다. 즉, 하나의 하드웨어를 여러 대처럼 동작시키거나 반대로 여러 대의 장치를 묶어 하나의 장치인 것처럼 사용자에게 공유자원으로 제공하는 기술입니다.
물리적 서버 하나를 여러대의 가상 서버로 나눠쓰는 Virtual Machine을 통해 가상화를 구현할 수 있습니다.
비슷한진 모르겠지만 예를 들자면 하나의 객체를 여러개의 인스턴스화 시키는 것과 비슷하다고 볼 수 있을거 같습니다. 내부 OS는 전부 복제되지만(객체의 필드, 메서드 등은 같음) 가상머신마다 서로 다른 파일들을 갖습니다.(인스턴스화 시켰을경우 argument값을 다르게 넣을 수 있음)
가상머신은 또다른 내 컴퓨터라고 볼 수 있을거 같습니다.
가상화를 하기위해 호스트OS로부터 시스템 자원을 할당받게 되는데 하이퍼바이저에 의해 게스트와 호스트가 나뉘게 됩니다. 생성된 게스트는 호스트나 서로다른 게스트와는 분리된 환경에서 구동되게 됩니다.
가상머신의 단점
가상머신은 운영체제를 복사하지만 컨테이너는 하나의 운영체제를 공유합니다.
컨테이너는 화물을 운반하는 박스를 떠올리면 되는데, 그 컨테이너에 옷, 과일 등등이 들어가고 규격화되어 트레일러와 같은 다양한 운송 수단으로 쉽게 옮길 수 있습니다.
서버에서도 마찬가지로 컨테이너는 애플리케이션을 개발, 배포, 실행하기 위한 소프트웨어 패키지를 말하며, 데스크탑이든, 노트북이든 어떤 환경에서도 실행할 수 있습니다.
컨테이너는 가상머신과 달리 하나의 운영체제를 공유하기 때문에, 호스트 OS와 다른 OS는 구동할 수 없습니다. 다만 특정 파일이나 라이브러리 등 실행을 위한 종속 항목만을 포함하기 때문에 배포를 위해 생성되는 이미지의 용량이 적어진다는 장점이 있습니다.(가상머신은 OS 자체를 복사)
이미지는 가상머신이나 컨테이너가 실행하기 위한 파일, 라이브러리, 설정등을 가지고 있는 파일입니다. 이미지는 레이어 계층 구조로 되어있어 변경사항이 생기면 전체를 새로 받지않고 변경된 레이어만 새로 받아서 업데이트 할 수 있습니다.