본문 바로가기

Cloud/Docker

PaaS 이해를 향한 여정 - (1) 컨테이너 이해하기

 Cloud가 핫해지면서 자연스럽게 배우게 된 단어들이 IaaS, PaaS, SaaS 이다. IaaS는 이름답게 Computing, network, storage를 관리하는 것이라는데 이 단계에서 좀 더 나아가 플랫폼까지도 클라우드화 시킨 것이 PaaS이다. 아무튼 이런 저런 과정을 거쳐 PaaS를 이해하기 위해 글을 작성해본다. 첫번째는 컨테이너이다.

 물리적으로 존재하는 컨테이너를 본 적 없는 사람은 없을 것이다. 실 생활에서 사용되는 컨테이너는 짐을 옮기는 시간을 줄이기 위해 만들어졌다. 이와 마찬가지로 IT 용어의 컨테이너란 한 컴퓨터 환경에서 다른 컴퓨터 환경으로 옮겨갈 때 안정적으로 이동하기 위해서 만들어진 솔루션이다. 개발 이후 배포를 하다보면 환경 때문에 머리 아픈 일이 비일비재하다. 크게는 OS부터 작게는 변수 하나까지 잘못 설정하면 문제가 생기는 경우가 많다. 컨테이너의 사용은 이런 문제를 해결해준다

 나는 잘 몰랐는데 컨테이너 기술은 도커 이전에(지금은 컨테이너=도커와 같이 되었지만) LXC라는 리눅스 컨테이너 기술이 있었다고 한다. 획기적인 기술은 아니지만 이전에 존재하던 기술을 잘 엮고 패키지화 해서 서비스하는 것이 얼마나 중요한지 알게되는 대목이다. 

 이쯤 나오는 것이 '컨테이너'와 'VM'의 차이다. 둘은 애플리케이션과 의존성을 묶어서 배포 이후 문제가 생기지 않게 하는 목적을 공통적으로 가지고 있다. 하지만 엄청나게 강력한 큰 차이점을 가지고 있다.

1. VM(Virtual Machines) : (하이퍼 바이저) - VM - GUEST OS - APP

 VM은 또 Hosted와 Bare metal 환경으로 나뉜다. Hosted는 Host의 OS가 있어서 VM은 OS에게 빌어서 접근해야 한다. Bare metal은 호스트의 OS가 존재하지 않아 가상 머신이 직접 하드웨어에 접촉해 요청하여 속도가 조금 더 빠르다. 무엇을 선택하느냐에 따라 장단점이 존재하므로 설계할 때에는 이런 점을 고려하여서 구축해야한다. 얘들은 모두 Hypervisor를 통한다는 것을 잊지 말자. Host의 OS의 존재 여부에 상관없이 관리는 모두 Hypervisor를 통해 된다.

2. 컨테이너

 컨테이너는 하드웨어의 가상화가 아닌 유저공간(userspace)의 추상화를 통해 운영체제 레벨의 가상화를 제공한다. 컨테이너는 Host OS의 커널을 공유하여 사용된다. 개인 커널이 없으니 컨테이너는 VM에 비해 엄-청나게 가벼울 것이다. 당장 VM에 하둡을 구성하던 그 때를 생각해보면, 5개의 centos만 깔아도 버벅대던 노트북이 생각나 눈물이 앞을 가린다. 내가 이해한 컨테이너는 가상의 환경을 만들어서 서로 간섭하지 않는다! 정도이다.

 

 다음은 이제 컨테이너보다 더 유명해져버린 도커에 대해 이해하는 포스팅을 작성하겠다.