Docker 기본개념
오픈 소스인 Docker에 대한 기본 개념을 정리하고 기록하고자 합니다.
최근 10년간 클라우드 시장이 급격하게 성장하고 있습니다. 최근 클라우드 환경에서 몇 번의 클릭으로 가상의 서버를 생성할 수도 지울 수 도 있게 되었습니다. 이렇게 가상의 서버에 필요한 소프트웨어를 배포하고 설정하는데 많은 시간이 걸립니다.
이러한 문제점을 쉽게 배포할 수 있게 도와주는 것이 Docker라고 보시면 됩니다.
Docker의 로고는 배 위에 컨테이너를 실고 가는 이미지를 하고 있는데 실제 사전적의미가 부두에서 컨테이너를 내리고 실는 역할을 의미합니다. 컨테이너에 필요한 서비스를 탑재하여 배포할 수 있음을 의미합니다.
우선 Docker를 이해하기 위해서는 Immutable Infrastructure의 이해가 필요합니다.
- Immutable Infrastructure
2013년 3월 오픈소스 컨테이너 프로젝트로 탄생한 Docker는 Immutable Infrastructure라는 개념을 구현한 오픈소스입니다.
Immutable Infrastructure란, 직역하면 불변의 인프라, 불변의 하부구조입니다.
즉, 운영서버와 호스트 OS를 분리하여 운영서버를 변경하지 않고 호스트 OS를 배포한다는 의미입니다. 내가 원하는 호스트 OS를 패키징한다면 운영서버를 변경하지 않고 해당 패키징을 배포할 수 있습니다. 서비스하고자 하는 이미지관리만 하면 빠른 배포 및 패치 등 관리가 용의합니다.

기존에 운영서버를 변경하지 않고 서비스를 이용하기 위해 주로 vmware와 같은 가상머신을 설치하여 서비스를 이용하였습니다. 기존 가상머신은 하이퍼바이저를 통한 하드웨어를 이용합니다. 이러한 하이퍼바저를 통한 접근은 직접적으로 하드웨어에 접근하는 것이 아니기에 오버헤드가 발생합니다. 그래서 리얼머신보다 아무래도 느립니다. 물론 이를 보안하기 위해 xen과 같은 반가상화라는 것을 이용하기도 합니다.
Docker는 하이퍼바이저를 통한 하드웨어의 가상화가 없습니다. 그래서 하드디스크, 메모리, 네트워크 접근이 리얼서버만큼 빠릅니다. 또한 게스트OS 설치가 없기에 원하는 서비스를 작은 용량으로 배포할 수 있어 가볍습니다.