클라우드 기반 기술중 하나로, 물리 머신의 리소스를 추상화하여 생성된 격리된 가상 컴퓨팅 환경을 의미한다.
가상머신이 생겨난 배경에는 다음과 같은 전통적 배포방식의 문제점이 있다.
과거에는 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 프로그램을 설치하는 방식을 사용하였다.
하나의 OS에 계정을 나눠 여러명의 사용자가 이용할 수 있도록 할 수는 있지만, 하나의 OS위에서 작동하기 때문에 어떤 사용자의 프로그램이 다른 사용자의 프로그램에 영향을 미칠 수 있다는 단점이 존재했다.
위와 같은 전통적 배포방식의 단점을 해결하기 위해 생겨난것이 가상머신을 사용한 가상화 배포방식이다.
하나의 OS에서 계정을 나누는 방식을 사용하는 것이 아닌, 하나의 컴퓨터를 가지고 여러개의 OS를 구동하는 방식이다.
CPU나 RAM과 같은 하드웨어를 물리적으로 교체하는 것이 아닌, 소프트웨어 설정만드로 이를 수행할 수 있게 해준다.

가상화 배포방식에서의 핵심은 Infrastructure위에 존재하는 Hypervisor이다.
하이퍼바이저는 하나의 시스템에서 가상 컴퓨터를 여러 개 구동할 수 있게 해주는 중간 계층을 의미하며 이 위에 여러 개의 가상머신을 구축할 수 있다.
각각의 가상머신에는 독립적인 OS가 존재하며, 해당 OS위에 어플리케이션이 올라가는 형태로 동작한다.
이러한 가상화 기술을 통해 한대의 하드웨어로 여러명의 사용자들에게 독립적인 환경을 제공하는 클라우드 서비스가 가능해졌다.
클라우드 서비스는 다른 회사의 공급자가 호스팅을 하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어를 의미한다.
이를 이용하면 자체 인프라나 하드웨어 설치 없이도 애플리케이션과 리소스를 쉽고 싸게 이용할 수 있다.
이러한 클라우드 서비스를 사용하면 전력, 위치, 서버 세팅, 확장성 등을 고려하지 않고 서비스 운영에만 집중할 수 있으며, 이러한 클라우드 서비스를 오프프레미스 방식이라 한다.
오프프레미스와 반대로 기업이나 개인이 자체 시설에서 보유하고 직접 유지관리하는 프라이빗 데이터 센터를 의미한다.
Iaas(Infrastructure-as-a-Service)는 인프라형 클라우드 서비스로, 클라우드가 단지 인프라만을 제공하는 방식이다.
node.js, MongoDB와 같은것들은 개발자기 필요에따라 직접 설치해야하는 대신 특정 서비스에 종속되지 않는다.
다른 서비스로 이동할 수 있는 이식성이 높지만 필요한 플랫폼을 직접 설치해야 하기에 운영 효율이 낮다.
AWS의 EC2가 대표적이다.
Paas(Platform-as-a-Service)는 플랫폼형 클라우드 서비스로, 클라우드가 node.js, MongoDB와 같은 플랫폼을 제공해준다.
단순히 클릭 몇번하는 것을 통해 필요한 플랫폼을 설치할 수 있으며, 모니터링이나 CI/CD가 제공된다.
하지만 특정 서비스 플랫폼에 종속되어 다른 서비스로 이동하는것이 쉽지 않다.
하지만 클릭 몇번으로 여러 플랫폼을 이용할 수 있기에 운영 효율이 좋다.
heroku가 대표적이다.
SaaS(Software-as-a-Service)는 서비스형 클라우드 서비스로, 완전한 서비스를 클라우드로부터 제공받아 사용한다.
예를들어 구글DOCS와 같이 완전한 서비스를 제공받으며, 클라우드를 통해 다른 컴퓨터에서도 쉽게 작업이 가능하다.

컨테이너는 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 종속성을 패키징하는 소프트웨어의 표준 단위이다.
이전에 설명한 가상머신과 다르게 하나의 OS위에서 여러개의 컨테이너가 동작한다.
OS를 공유하기에 빠르고 경량화되어있으며 격리성도 높지만, OS에 문제가 생기면 다른 앱에도 영향을 미칠 수 있다.
도커는 컨테이너의 필요한 기능을 제공하는 플랫폼이다.
애플리케이션에 필요한 환경설정관련 절차를 도커파일에 작성 후 빌드를 하면 도커 이미지가 생성되고, 해당 이미지를 실행시키면 도커 컨테이너가 만들어진다.
그 후 해당 컨테이너에 설정된 프로그램, 데이터 등이 실제 컴퓨팅 자원 위에서 돌아가게 된다.
위에서 IaaS는 서비스에 종속적이지 않고 이식성이 높지만 필요한 플랫폼을 하나하나 설치해야 하기 때문에 운영 효율이 떨어지며, PaaS는 운영 효율은 높지만 이식성이 떨어진다 설명하였다.
이때 IaaS와 도커, 컨테이너를 함께 사용할 시 IaaS와 PaaS의 장점을 모두 이용할 수 있다.
도커를 사용하여 도커 이미지를 만들경우 서로 다른 환경에서도 손쉽게 같은 환경을 구성할 수 있게 된다.
따라서 어떠한 서비스에서 다른 서비스로 이동을 하거나, 어떠한 환경을 설정해야 하는 상황에서 도커 이미지로 만든 컨테이너만을 구동시키면 되기에 운영 효율을 높일 수 있다.