Docker/Containerization

» dev

Docker

컨테이너 기반의 오픈소스 가상화 플랫폼이다. 애플리케이션을 분리시켜 컨테이너로 추상화시켜 소프트웨어를 빠르게 제공할 수 있다.

VM와의 차이?

가상화 기술은 기존에도 존재하였다. 가상머신(Virtual Machine)은 하이퍼바이저(Hypervisor)를 이용해 여러개의 운영체제를 하나의 호스트에서 생성하여 사용하는 방식이였다.

image

이러한 여러개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 vm에 운영체제가 설치되어 사용되었다. 하이퍼바이저에 의해서 생성된 운영체제는 게스트 운영체제(Guest OS)라고 하며, 각 게스트 운영체제는 완전히 독립된 공간과 시스템 자원을 할당받아 사용하였다.
예로 VirtualBox, VMware등이 있다.

그러나, 독립된 가상화 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다.

즉, 하나의 게스트에는 톰캣, 하나의 게스트에 MySQL, 하나의 게스트에 java를 설치하여 사용하기 때문에 무겁고 관리가 불편하다.

도커는 하나의 HOST OS를 공유하여 불필요한 리소스를 줄일 수 있다.

도커 컨테이너

컨테이너는 애플리케이션이 한 컴퓨터 환경에서 다른 컴퓨터 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키징 하는 표준 소프트웨어 단위이다.
Docker 컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정 등 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어 패키지이다.

하이퍼바이저 위에서 여러개의 게스트 OS를 실행하는 대신 컨테이너(Container)는 호스트 OS 커널을 사용하여 격리된 여러 개의 컨테이너를 실행한다.