도커란.
운영체제가 프로세스 처럼 처리하기 위해 서버를 격리시키는 것
‘가상화’가 생겨난 이유 : 하드웨어의 발달로 하드웨어의 자원을 더 효율적으로 사용하고, 서비스의 다각화를 위해 나타나기 시작했다.
도커란, 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.
가상 머신 : VMware, VirtualBox 등..
정의 : 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성하여 사용하는 방식. 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 가상 머신 단위로 구별되고, 게스트 운영체제라고 한다. 이들은 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다.
단점 : 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다. 또한, 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지(iso)의 크기 또한 커진다.
따라서 가상머신은 완벽한 운영체제를 생성할 수 있다는 장점은 있지만, 성능의 손실이 있으며, 애플리케이션으로 배포하기에는 가상머신의 이미지의 크기가 커서(수 GB) 부담스럽다는 단점이 있다. 즉, 오버헤드가 크다.
도커 컨테이너 :
정의 : 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없습니다.
컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량이 실행파일 외에 거의 필요 없다.
커널에 대한 개념 : 메모리관리(사용량 추적), 프로세스 관리, 장치 드라이버, 시스템 호출 및 보안 기능을 한다.
따라서, 가상머신에 비해 이미지로 만들어 배포하는 시간이 빠르고, 가상화된 공간을 사용할 때에 성능의 손실이 거의 없다는 장점이 있다.
도커 컨테이너를 사용하면 애플리케이션의 개발과 배포가 편해진다.
호스트 OS 위에서 실행되는 격리된 공간에서의 개발이므로, 호스트 OS에 영향을 끼치지 않고, 컨테이너를 ‘도커 이미지’라는 패키지로 만들어 운영 서버에 전달하기만 하면 되므로 개발과 배포가 쉽다.
도커 컨테이너를 사용하면 여러 애플리케이션의 독립성과 확장성이 높아진다.
소프트웨어의 여러 모듈이 상호 작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식을 모놀리스 애플리케이션이라고 한다. 그러나, 서비스 기능이 복잡해지고 규모가 큰 서비스 일수록 모놀리스 애플리케이션의 확장성과 유연성이 줄어든다.
이러한 문제점을 대체하기 위해 마이크로 서비스 구조가 떠오르고 있다.
마이크로 서비스 구조는 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응할 수 있으며, 각 모듈의 관리가 쉬워진다는 장점이 있다.
이는 컨테이너의 생성이 쉽고 빠르므로 컨테이너를 동적으로 늘려서 변화에 쉽게 대처하기 쉬우므로 유지, 보수가 용이하다. 이와 같은 컨테이너 기반의 마이크로 서비스는 구조를 직접 구현하기 보다는 도커 스웜모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 사용한다.