물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식. 어떤 프로그램을 설치했을 때 다른 앱에 영향을 미친다.
가상머신을 기반으로 배포하는 것을 말하며, 중간에 있는 하이퍼바이저는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미하며 컴퓨터 한대로 여러개의 앱을 독립적으로 돌릴 수 있다.
앞서 설명한 클라우드는 이러한 가상화라는 기술 때문에 클라우드 컴퓨팅이 가능해진 것입니다.
가상머신 : 컴퓨터의 모든 부품을 애뮬레이션(모든 부품의 모든 기능을 소프트웨어적으로 구현) 한 것.
이렇게 되면 하나의 컴퓨터 위의 여러개의 가상머신을 둘 수 있고 이는 서로 샌드박스되어 전혀 상호 작용하지 않고, 한 가상 머신위의 프로그램은 다른 가상머신위의 프로그램에서 볼 수 없다.
다만 OS가 공유가 안되기 때문에 전통적 배포보다는 아니지만 가상머신에 일일히 OS를 설치해야 하는 등 비용이 많이 든다.
컨테이너는 코드와 모든 종속성(Node.js, 라이브러리 등)을 패키징하는 소프트웨어의 표준 단위이다.
컨테이너의 '이미지'라고 파일에 모든 라이브러리와 종속성을 포함하는 코드 기반 파일에 저장된다.
컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유하며 가상머신보다 경량화 되어있다. 운영체제를 공유할 수 있기 때문에 그만큼 실행이 빠르며 가상화 배포보다 일반적으로 약 5배의 애플리케이션을 실행할 수 있다.
컨테이너나 VM은 이러한 것을 통해 궁극적으로 애플리케이션이 ‘서로 다른 컴퓨터에서 설치되어있다’고 생각하게 만든다. 즉, 두 프로그램 간에 간섭을 일으킬 수 없는 장벽을 친다.
다만 컨테이너는 OS를 공유하는 방식이기 때문에 애플리케이션의 문제가 OS에 영향을 미치면 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있다.
도커는 앞서 설명한 컨테이너라는 경량 단위로 애플리케이션을 실행하는 기능을 제공하는 플랫폼이며, 여러 컴퓨터 간에 공유된 규격으로 리소스를 공유할 수 있어 유지보수성이 증대된다.
도커는 IaaS의 장점인 이식성, PaaS의 장점인 운영비가 저렴함을 갖춘 도구이다. 기존의 종속적인 라이브러리나 ~~파일을 ~~로 복사 등 기존 시스템에 대한 설치 절차를 Dockerfile 스크립트에 작성하기만 하고 배포 관련사항을 도커스웜이나 쿠버네티스에 맞춰 작성하기만 하면 된다는 점에서 편리하다.
보통 도커 + 쿠버네티스, 또는 도커 + 도커스웜으로 구축된다.
도커는 다음과 같은 과정을 거쳐 컨테이너를 만듭니다.
1. 도커파일이 빌드
2. 도커이미지 생성 및 실행
3. 도커컨테이너 실행
※ 쿠버네티스이나 도커스웜 둘 다 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 컨테이너 오케스트레이션이다.
Q) 도커는 IaaS일까? 아니면 PaaS일까?
엄밀히 말하면 둘 다 아니고 “클라우드 가상화기술”이지만 굳이 따지면 PaaS 의 일부라고 보면 된다.
컨테이너의 가상화는 커널 레벨이 아닌 운영 체제 레벨, 즉 가상 머신의 가상화가 일어나는 곳에서 한 추상화 계층 높은 곳에서 일어난다.
다만, IaaS에서도 도커는 가능하며, PaaS인 heroku에서도 가능하다.