컨테이너기반 가상화 도구이다.
Docker = Container ?
아니다, Container 를 다루는 것들은 Docker 외에도 여러개가 있으며, Docker는 Container기술을 이용해 여러 기능을 추가한 오픈소스 프로젝트라고 할 수 있다.
컨테이너? 가상화? 이것들이 다 무엇인지 처음 들어보는 사람들이 많을것이다.
이를 차근차근 한번 알아보도록 하자.
컨테이너를 알아보기 전 가상화에 대해서 알아보도록 하자.
우선, 가상화라는 개념의 탄생 배경을 알아보도록 하겠다.
동시접속자 100만명까지 버틸 수 있는 서버에 서비스를 하나 올렸는데 동시접속자가 1000명꼴이다.
이 얼마나 낭비가 심한가?
그래서 생각한게 이 서버에 새로운 서비스를 추가하기로 하는데, 추가를 하다보니 기존의 서비스와 충돌이 잦게되고, 결국 서비스를 추가하지 못했다.
이런 상황 속 문득, 서버의 성능을 나누어서 사용하면 되지않을까? 라는 생각에서 가상화 라는 개념이 등장하였다.
하나의 물리적 서버 호스트에서 여러 개의 서버 운영체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처
VMware라는것을 들어본 적 잇을것이다. 없으면 찾아보자.
이는 OS 위에 여러 개의 가상으로 OS를 설치할 수 있도록 도와주는데 이렇게 설치된 OS들을 가상머신 이라는 단위로 구별이 된다.
이런 가상머신들은 각각 할당된 자원만큼의 성능을 뽑아낼 수 있다.
여기서 한 가지 용어가 등장하게 되는데 서버의 가상화를 구현해주는 기술을 하이퍼 바이저라고 한다.
완벽한 운영체제를 운용할 수 있다.
가상화 작업을 진행할 때 무조껀 하이퍼바이저를 거치기 때문에 일반 호스트에 비해서 성능 손실이 일어나기때문에 비효율적이다.
또, 가상머신을 이용해 배포를 할 때 가상머신 하나를 동작하기 위해 라이브러리, 커널 등 모두를 포함하기때문에 배포하기위한 이미지를 만들었을 때 사이즈가 커지기대문에 속도와 용량이 부담스럽다.
위 가상화의 단점때문에 작은 서비스를 하나 띄우는데에도 OS를 새로 띄우는것은 부담이 크다.
그렇기때문에 나온 개념이 컨테이너이다.
이는, 가상화된 공간을 사용하기위해 chroot, namespace, cgroup을 통해 프로세스별로 격리된 환경을 만들어준다.
가상화와는 다르게 컨테이너 위에는 애플리케이션 실행을 위한 라이브러리, 실행 파일이 존재한다. 그렇기 때문에 이를 이미지로 만들어도 용량에 대한 부담이 크지 않다.
이미지를 만들어 배포하는 시간이 현저히 줄어들고 하이퍼바이저를 사용하지않고 Docker Engine 자체적으로 하기 때문에 이미지 제작 속도가 빠르고, 성능의 저하도 없다
위에 언급한듯이 프로세스별로 격리된 환경을 만들어주기때문에 Host에 영향을 미치지 않고 작업을 할 수 있도록 도와준다.