Docker
하나의 서버를 여러개의 프로그램을 설치하고 포트를 설정하고 서로 다른 서버를 연결하는 작업은 고급 개발자들의 섬세한 작업이 필요한 영역이다. 하지만 Docker의 등장으로 서버관리 방식이 완전히 바뀌게 되었다.
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 서버에서 이야기하는 컨테이너는 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해주는 것이다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떤 프로그램도 컨테이너로 추상화 할 수 있다.
격리된 공간에서 프로세스가 동작하는 기술이다. 가상화 기술의 하나지만 기존 방식과는 차이가 있다.
기존의 가상화 방식은 주로 OS 가상화를 하였다. VMWare나 VirtualBox같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식이다. 이 방식은 여러가지 OS를 가상화 할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영 환경에선 사용할 수 없었다.
이러한 상황을 개선하기 위해 CPU의 가상화 기술을 이용한 KVM(Kernal-based Virtual Machine)과 반가상화(Paravitualization) 방식의 Xen이 등장했다. 이러한 방식은 게스트 OS가 필요하긴 하지만 전체 OS를 가상화하는 방식이 아니였기 때문에 호스트형 가상화 방식에 비해 성능이 향상되었다. 이러한 기술들은 OpenStack이나 AWS, Rackspace같은 클라우드 서비스에서 가상 컴퓨팅 기술의 기반이 되었다.
전가상화든 반가상화든 추가적인 OS를 설치하여 가상화하는 방법은 어쨋든 성능문제가 있었고 이를 개선하기 위해 프로세스를 격리하는 방식이 등장한다.
리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다. CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 Virtual Machine을 사용하는 느낌을 준다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고
apt-get
이나 yum
으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수 있다.도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념이다.
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있다. 상태값을 가지지 않고 변하지 않는 다. 컨테이너는 이미지를 실행한 상태