도커(Docker)란?

고래? 컨테이터? 도커
도커는 사실 새로운 개념의 기술은 아니다.

도커 이전에 리눅스 컨테이너(LXC)라는 기술이 존재했다. 리눅스 컨테이너는 리눅스 커널에 포함되어 있었던 기술로 cgroupsnamespace를 활용하여 cpu, 메모리, 디스크, 네트워크 등을 할당하고 프로세스, Users 등을 분리할 수 있었다.

하지만 리눅스 컨테이너는 프로세스 단위로 분리한 것 외엔 실제 운영 시 활용할 수준에 이르지 못했다.

그래서 등장한게 바로 도커(Docker)이다.
일단 도커를 알기 전에 우리는 가상머신(VM)에 대해 먼저 알고 갈 필요가 있다.

가상머신(Virtual Machine)란?

대표적인 가상화 툴인 Virtual Box
컴퓨터 안에 존재하는 또 다른 컴퓨터, 하나의 호스트에 다수의 운영체제를 생성하는 방식이다.
각 운영체제 하나 하나를 가상 머신이라는 단위로 부른다. 대표적으로 VirtualBox, VMWare, Hyper-V, Parallels 등이 존재한다.

가상머신과 도커

위 이미지는 가상머신과 도커의 기본적인 구조로 차이점을 쉽게 알 수 있을 것이다.

가상 머신은 호스트 운영체제 내 하이퍼바이저(가상화 기술)로 게스트 운영체제를 설치하는 구조이다.
결국 게스트 운영체제 자체를 설치하기 때문에 의존 라이브러리와 커널등은 따라올 수 밖에 없게 된다.
그러다보면 호스트의 많은 리소스를 할당 및 차지 하게 된다.

이에 반해 도커는 게스트 운영체제를 생성하는 것이 아닌 가상화 된 공간을 프로세스 단위로 생성한다.
가상 머신과 다르게 호스트와 커널을 공유하고 컨테이너에 필요한 라이브러리만 설치하게 되는 것이다.
필요한 부분만 묶어 이미지라는 단위로 배포하고 실행하므로 가상 머신에 비해 적은 리소스를 차지한다.

LXC(LinuX Container, 리눅스 컨테이너)

앞서 설명한 리눅스 컨테이너와 도커의 관계에 대해 궁금할 수 있다.
초창기 도커의 경우 리눅스 커널 단에 포함되어 있던 리눅스 컨테이너를 활용하였다.

현재는 LibContainer 개발 프로젝트를 진행하였고 리눅스 컨테이너로부터 자유로워진 상태이다.
리눅스 컨테이너가 커널단이라면 립컨테이너는 유저랜드(Userland) 라이브러리이다.

Share