: 컨테이너 기반의 오픈소스 가상화 플랫폼
도커를 알아보기 전, 가상화와 컨테이너에 대해 알아보겠습니다.
가상화란 물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술입니다. 하나의 하드웨어를 여러개의 가상머신으로 분할하는데 이때 분할된 가상머신들은 각각 독립적인 환경으로 구동됩니다.
위의 그림과 같이 베이스가 되는 기존의 환경을 Host OS, 그리고 가상 머신으로 분할된 각각의 환경을 Guest OS라고 부릅니다.
가상머신으로 무언가 하려면 하이퍼바이저를 거쳐야 하기 때문에 속도 저하가 일어나며, 해당 환경을 구동하는데 필요한 파일을 모두 가지고 있기 때문에, 가상 머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다는 한계점이 있습니다.
컨테이너란 컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용하면서 필요한 프로세스를 격리해 독립된 환경을 만드는 기술을 뜻합니다.
하이퍼바이저처럼 OS의 가상화가 아닌, 프로세스를 격리하는 방식입니다.
배포를 위해 생성되는 이미지의 용량이 작아진다는 장점이 있습니다. 운영체제가 아닌 프로세스이며, 하이퍼바이저를 거칠 필요가 없어 실행 속도가 빨라집니다.
다시 말해, 도커는 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술이라고 할 수 있습니다.
이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않습니다(Immutable).
이미지를 실행하면 프로세스, 즉 컨테이너가 됩니다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있습니다.
이미지를 사용하면 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없고 종속성 이슈에서 벗어날 수 있습니다. 새로운 서버가 추가되면 미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성만 하면 됩니다. 한 서버에 여러개의 컨테이너를 실행할 수 있고, 수십, 수백, 수천대의 서버도 문제없습니다.
이미지는 레이어라는 계층 구조로 이루어져 변경 사항이 생기면 새로운 레이어를 추가해서 기록합니다. 이미지 전체를 새로 받지 않고 해당 레이어만 받는 것으로 이미지를 업데이트할 수 있습니다.