Docker 란 무엇인가?
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼
입니다.
서버에서 이야기하는 컨테이너는 우리가 알고 있는 물건을 옮기는 컨테이너와 비슷한 부분이 있습니다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여
프로그램의 배포 및 관리를 단순하게 해줍니다.
백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로
추상화할 수 있고, 조립 PC, AWS, Azure, Google cloud 등 어디에서든 실행할 수 있습니다.
Container
컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다.
가상화 기술의 하나지만 기존방식과는 차이가 있습니다.
기존의 가상화 방식은 주로 OS 를 가상화하였습니다.
우리에게 익숙한 VMware 나 VirtualBox 같은 가상머신은
호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다.
이 방식은 여러가지 OS 를 가상화(리눅스에서 윈도우를 돌린다던가) 할 수 있고
비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없었습니다.
이러한 상황을 개선하기 위해 CPU 의 가상화 기술(HVM)을 이용한
KVMKernel-based Virtual Machine 과 반가상화 Paravirtualization 방식의 Xen 이 등장합니다.
이러한 방식은 게스트 OS 가 필요하긴 하지만 전체 OS 를 가상화하는 방식이 아니였기 때문
에
호스트형 가상화 방식에 비해 성능이 향상
되었습니다.
이러한 기술들은 OpenStack 이나 AWS, Rackspace 같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었습니다.
전가상화든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법
은
성능문제가 있었고 이를 개선하기 위해 프로세스를 격리 하는 방식
이 등장하였습니다.
리눅스에서는 이 방식을 리눅스 컨테이너
라고 하고
단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작
합니다.
CPU 나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용
하고
성능적으로도 거의 손실이 없습니다.
도커의 기본 네트워크 모드는
Bridge
모드로 약간의 성능 손실이 있습니다.네트워크 성능이 중요한 프로그램의 경우 --net=host 옵션을 고려
해야 합니다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고
독립적으로 실행되어 마치 가벼운 VMVirtual Machine 을 사용하는 느낌
을 줍니다.
실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고
apt-get 이나 yum 으로 패키지를 설치할 수 있으며 사용자도 추가하고
여러개의 프로세스를 백그라운드로 실행할 수도 있습니다.
CPU 나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나
호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있습니다.