컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고, 배포하고, 실행할 수 있도록 설계된 도구이다. 컨테이너 기반의 오픈소스 가상화 플랫폼 또는 생태계라고 할 수 있다.
일반적으로 컨테이너라는 것은 물건을 넣고 다양한 운송 수단으로 옮길 수 있게 하는 박스와 같다. 서버에서의 컨테이너도 동일하다. 다양한 프로그램, 실행 환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포, 관리를 좀 더 수월하게 해준다.
도커 문서에서 정의하는 컨테이너란 어플리케이션이 하나의 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 안정적이고 빠르게 실행될 수 있도록 코드와 모든 종속성을 패키징하는 표준 단위이다.
컨테이너 이미지는 코드, 시스템 도구, 시스템 라이브러리 및 설전과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지이다.
도커 이미지는 프로그램을 실행하는데 필요한 설정이나 종속성을 가지고 있다.
도커 이미지를 이용해 컨테이너를 생성하며 컨테이너로 프로그램을 실행한다.
Linux나 Windows 기반 어플리케이션에서 모두 사용할 수 있게 만들어진 컨테이너는 인프라에 관계없이 항상 동일하게 실행된다.
컨테이너는 소프트웨어와 환경을 격리시키고 development와 staging 간에 차이점에 있어도 균일하게 작동하도록 한다.
가상머신(호스트형 하이퍼 바이저 기반)은 일반적인 소프트웨어처럼 호스트 OS 위에서 실행되며 하드웨어의 자원을 가상머신 내부의 게스트 OS에 에뮬레이트하는 방식으로 게스트 OS의 종류에는 제약이 없으며 구현이 쉽다는 장점이 있으나 이러한 구동 방식으로 인해 오버헤드가 크다는 단점도 존재한다.
도커 컨테이너와 가상머신은 하드웨어에서 격리된 환경에 어플리케이션을 배치한다는 공통점이 있다.
이 둘을 비교해보자면, 컨테이너는 가상머신과 달리 하이퍼바이저와 게스트 OS가 필요하지 않으므로 오버헤드도 적고 가볍다.
어플리케이션을 실행할 때 컨테이너는 호스트 OS 위에 바로 어플리케이션의 실행 패키지인 이미지를 배포하면 되지만 VM은 호스트 OS 위의 VM 내부 게스트 OS를 부팅한 다음 어플리케이션을 실행시키는 복잡한 과정을 거쳐야 한다.
컨테이너와 가상머신의 가장 큰 차이점은 "환경을 얼마나 격리시키는지" 이다.
컨테이너에서 실행되는 어플리케이션은 컨테이너가 제공하는 격리된 환경 내 샌드박스가 있지만 다른 컨테이너들과 동일한 호스트의 커널을 공유한다. 즉, 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 확인할 수 있고 호스트 시스템은 모든 프로세스를 나열할 수 있다.
가상머신은 호스트 OS, 하이퍼 바이저 등과 독립되어 있다.
가상머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해 프로세스를 시작하고 호스트 시스템은 이를 위해 하드웨어의 자원 일부를 VM에 할당한다. 그러면 이 특정한 VM 환경을 위해 모든 것을 새로 세팅하는 것이다.
와 도커!