참고 링크 :
https://born-dev.tistory.com/39
https://medium.com/@lhs6395/container%EC%99%80-vm%EC%9D%98-%EB%B9%84%EA%B5%90-84f6a8b7cd4c
https://hiaurea.tistory.com/53
- 가상화 종류
https://tech.cloud.nongshim.co.kr/2018/09/18/%EA%B0%80%EC%83%81%ED%99%94%EC%9D%98-%EC%A2%85%EB%A5%983%EA%B0%80%EC%A7%80/
두개는 유사하다고 볼수 있음
- 가상머신
Host OS 위에 hypervisor 설치 후 그 위에 GuestOS 설치 후 필요한 라이브러리를 설치하여서 작동
일반적으로 용량이 큼, GB 단위임
종류는 전가상화와 반가상화가 있음
여러개의 VM이 동잃한 OS에서 사용한다고 해도 데이터는 물론 코드도 전혀 공유되지 않음
퍼포먼스 오버헤드도 상담하며 실행시간이 오래걸림
- 컨테이너
Host OS 위에 Docker Engine 설치 후 그 위에 컨테이너에서 작동함
일반적으로 용량이 작음, MB 단위임
무겁고 느린 가상화 방식을 해결하기 위해 프로세스 격리하는 방안임
컨테이너화는 커널하나에 격리된 여러개의 사용자 공간 인스턴스가 포함될 수 있도록 애플리케이션 수준에서 이루어 지는 가상화의 일종
애플리케이션 코드, 런타임, 시스템도구, 시스템 라이브러리 및 구성을 하나의 인스턴스에 패키징 하는 기본적인 방법을 제공
하드웨어에 설치된 커널(운영 체제) 하나를 공유함
컨테이너 개념은 도커가 만든것이 아니고
- 차이점
컨테이너는 가상머신과 달리 도커엔진만 있으면 바로 사용할수 있어서 이식성 확장성이 좋다
다만 가상머신은 독립적으로 실행되기때문에 하나의 서버에 대한 보안이슈가 발생하면 그 서버만 문제가 되지만
컨테이너는 다같이 보안이슈가 발생간다
- 가상머신 선택
가상머신은 모놀리식 워크로드 패키징에 사용되는 기존 방식인 단일 컨테이너보다 많은 작업을 실행함
다만 확장된 기능으로인해 os , 애플리케이션 , 라이브러리에 의존하며 VM의 이식성이 크게 저하됨
다음 용도에 적합
1. 기존 레거시 및 모놀리식 워크로드 수용
2. 위험한 개발 사이클 분리
3. 인프라 리소스 프로비저닝
4. 다른 OS에서 또 다른 OS 실행
- 컨테이너 선택
빠르게 자주 변경하고 다시 배포해야 하는 거의 모든 애플리케이션이 컨테이너에 적합함
MSA에 적합함
이식성이 좋아서 클라우드환경 및 베어메탈 시스템간에도 쉽게 이동가능
클라우드환경 전반에 걸쳐 일관된 개발 및 자동관리 환경을 제공
클라우드 네이티브 애플리케이션을 사용하여 새 애플리케이션의 빌드방법 기존애플리케이션의 최적화 방법등을 가속화 함
다음 용도에 적합
1. 클라우드 네이티브 애플리케이션 빌드
2. MSA 패키징
3. DevOps 또는 CI/CD 프랙티스 촉진
4. 동일한 OS를 공유하는 다양한 IT 설치 공간에서 확장 가능한 IT 프로젝트 전환
- 호스트 가상화
호스트가상화는 Host OS 위에 Guest OS가 구동되는 방식
VMware , MS Virtual Server , Virtual Box 등이 있음
가상의 하드웨어를 사용하기때문에 호스트 운영체제에 크게 제약사항이 없음
다만 OS위에 OS가 실행되기 때문에 오버헤드가클 수 있음
- 하이퍼바이저 가상화
베어메탈(Bare-metal)기반
Host OS 없이 하드웨어에 하이퍼바이저를 설치하여 사용하는 방식
Xen , MS hyper-V , citrix, KVM 등이 있음
별도의 Host OS 가 없기 때문에 오버헤드가 적고, 하드웨어를 직접 제어하기 때문에 효율적으로 리소스를 사용할 수 있음
다만 자체적으로 머신에 대한 관리 기능이 없기 때문에 관리를 위한 컴퓨터나 콘솔이 필요함
-- 전가상화
전가상화는 하드웨어를 완전히 가상화 하는 방식으로 Hardware Virtual Machine 이라고 불림
하이퍼바이저를 구동하면 DOM0 라고 하는 관리용 가상 머신이 실행되며, 모든 가상머신들의 하드웨어 접근이 DOM0을 통해서 이뤄짐
모든 명령에 대해서 DOM0 이 개입하는 형태
가상화된 OS의 종류와 상관없이 명령어를 실행 할 수 있음
가상화된 OS들에게 자원을 할당해주는 역할을 담당
하드웨어를 완전히 가상화 하기 때문에 Guest OS 운영체제의 별다른 수정이 필요 없음
다만 하이퍼바이저가 모든 명령을 중재하기 때문에 성능이 비교적 느림
-- 반가상화
반가상화는 전가상화의 달리 하드웨어를 완전히 가상화 하지 않음
전가상화의 가장 큰 단점인 성능저하의 문제를 해결하기 위해 하이퍼콜(Hyper Call) 이라는 인터페이스를 통해 하이버바이저에게 직접 요청을 날릴 수 있음
가상화된 각 OS들이 각각 다른 번역기를 가지고 있음
모든 명령을 DOM0를 통해 하이퍼 바이저에게 요청하는 전가상화에 비해 성능이 빠름
다만 하이퍼바이저에게 Hyper Call 요청을 할 수 있도록 각 OS의 커널을 수정해야 하며 오픈소스 OS가 아니면 반가상화를 이용하기 쉽지 않음
- 컨테이너 가상화
호스트 OS위에 컨테이너관리 소프트웨어를 설치하여 논리적으로 컨테이너를 나누어 사용
컨테이너는 어플리케이션 동작을 위한 라이브러리와 어플리케이션등으로 구성되기 때문에 이를 각각 개별 서버처럼 사용 가능
컨테이너 가상화는 오버헤드가 적어 가볍고 빠른 장점이 있음
- 컨테이너의 장점
* 시스템의 성능 부하가 훨씬 적음
컨테이너의 경우 생성 및 실행되면 마치 운영체제위에서 하나의 어플리케이션이 동작하는 것과 동일한 수준의 컴퓨팅 자원을 필요로 함
시스템은 기존 응용프로그램을 실행시키는 것과 유사하게 이를 구동할 여분의 컴퓨팅 자원만 있으면 됨
* 자원에 대한 배분도 좀 더 유연함
컨테이너에서 실행중인 서비스에서 더많은 가용성이 필요하거나 반대로 필요 없을 때, CPU에 대한 사용량이나 사용자가 설정한 임계치에 따라 자동으로 확장 또는 축소가 가능
* 구동 방식이 간단함
특정 클라우드 어플리케이션이 실행되기 위한 모든 라이브러리와 바이너리파일등이 패키지화 되어 있어서, 기존의 시스템에서 실행만 하면 됨
반면 가상머신은 새로운 서비스를 실행하려면 VM을 실행시키고 게스트OS를 부팅한 후 어플리케이션을 실행해야함
- 컨테이너의 단점
* 자원의 격리와 쿼터 제한이 어려움
가상머신은 가상 하드웨어를 직접 제어할 수 있기 때문에 높은 수준의 자원 격리와 쿼터 제한을 수행 할 수 있음
컨터이너의 경우 가상 하드웨어를 두고 있지 않기 때문에 격리 수준과 쿼터 제한이 가상 머신에 비해 떨어질수 밖에 없음
컨테이너 서비스 플랫폼들의 격리기술과 쿼터 제한기술이 발전하고 있긴함
* 호스트 운영체제에 실행 환경이 묶임
컨테이너는 호스트 운영체제의 커널을 공유하기 때문에 호스트 운영체제 환경을 그대로 가져감
ex) 리눅스에 컨테이너를 띄어서 윈도우즈 실행환경을 만들 수 없음