본문으로 바로가기

가상머신과 도커(Docker)

category 프로그래밍 & IT/Docker 2017.04.02 01:20

최근 서버를 구축할 때 뿐 아니라 일상적인 개인 PC에서도 Docker를 자주 사용할 만큼 Docker 가상화 기술이 대중화 되었다.

우선 도커(Docker)를 공부하기 이전에 반드시 먼저 알고 넘어가야 하는 것이 가상 머신이다. 도커를 직접 설치해서 사용하기 전에 가상머신의 개념과 특징에 대해 알아보고, 도커가 탄생한 배경과 기본적인 특징에 대해 알아보자.




1. 가상 머신과 클라우드 서비스의 등장


하나의 컴퓨터에서 가상으로 또 다른 컴퓨터들을 만들어내기 위해 생겨난 개념이다. 


하나의 컴퓨터에 여러 개의 OS를 설치할 수는 있지만, 동시에 부팅할 수 있는 것은 단 하나의 OS이다. 맥 컴퓨터에서 인터넷 뱅킹 등을 사용하기 위해서는 윈도우를 별도로 설치해 다시 부팅해야 했지만, 가상화 기술을 사용하면 맥 환경에서 가상머신에 윈도우를 올리고 사용할 수 있게 된다.


1960년대에 처음 가상화에 대한 개념이 생겨났다. 그 후 컴퓨터 성능이 점점 좋아지며 PC에서도 흔히 사용한다.

일반 개인용 컴퓨터(PC)의 성능이 좋아진 만큼 서버로 사용되는 컴퓨터의 성능은 더더욱 좋아졌다. 

서버는 일반적으로 가장 최악의 상황에 대비해 넉넉한 환경을 준비하기 때문에 서버는 일부만 일하고 대부분은 놀게 된다.


그렇다면?

그 놀고 있는 서버에 가상 머신을 여러 개 올려서 다른 일을 더 시키면 좋을 것이다.


거기다 인터넷 환경이 보급되며 서버도 많아졌다.

하나의 뛰어난 성능의 컴퓨터를 준비하고, 가상 머신을 여러 개 구동시킨 다음에 거기에 각각 서버를 구축해 버리면 컴퓨터가 노는것을 최소화 할 수 있을 것이다.(악덕이네..)


서버를 새로 구축하는 것에는 상당한 수고가 들어간다. 각종 환경 설정에 프로그램 설치에...

이왕 서버를 만드는거 서버를 구축하는데 필요한 각종 프로그램들이나 DB를 설치해서 하나의 파일처럼 만들어 놓고, 필요할 때마다 새로 가상머신을 구동하고 그 파일을 복사해서 실행하면 편할 것이다.


이렇게 거대한 컴퓨터 환경을 구축해 두고 가상화 기술을 활용해 필요한 사람들에게 서버를 구동해 임대해 주는 서비스가 바로 클라우드 서비스 이다.





2. 가상 머신의 문제점


좋게만 보이는 가상 머신에는 큰 문제가 하나 있다.

하나의 컴퓨터에 다른 컴퓨터를 통째로 만들다 보니 성능 손실이 발생하는 것이다.

실제로 VMware나 Oracle VM VirtureBox를 사용해 보면 Host PC를 사용하는 것보다 상당히 느리다.


그래서 생긴 개념이 컴퓨터를 처음부터 하나 더 만드는 것이 아니라 호스트와 커널은 공유하자! 하면서 나타난 반가상화 기술이다.


어찌 되었건 가상 머신은 하나의 완전한 컴퓨터가 되어야 하기 때문에 구동하기 위해서는 항상 운영체제(OS)를 설치해야만 한다.

OS는 많은 용량이 필요하기 때문에 가상 머신 하나의 이미지가 가지는 기본 용량 자체도 매우 커진다.

이 큰 가상화 이미지를 네트워크로 주고 받는 것에도 데이터 비용이 상당히 많이 들어간다.


거기다 가상화를 지원하는 소프트웨어들은 OS를 가상화 하는 기술에만 주력하고 만들어진 가상 머신 이미지를 관리한다거나 공유하고 배포하는 기능은 부족하다.



3. 리눅스 컨테이너와 도커


위와 같은 가상 머신의 성능 문제를 해결하기 위해 생겨난 기술이 리눅스 컨테이너이다.

컨테이너 안에 가상 공간을 만들긴 하지만 실제 구동하는 실행파일을 호스트 컴퓨터에서 직접 실행한다.

또 다른 OS를 구동하고 가상 공간 위에서 실행파일을 실행하는 것보다 훨씬 성능면에서 경제적이다.


이는 리눅스 커널의 cgroups와 namespaces가 제공하는 기술이다.

"가상화" 라기 보다는 "격리"라는 말이 더 알맞다.



도커는 위와 같이 리눅스 컨테이너를 사용한다.

초기에는 LXC(Linux container)를 기반으로 구현했는데, 버전 0.9부터는 libcontainer를 개발하여 사용한다.

이는 실행 옵션으로 선택 가능하다.



4. 도커의 특징


도커는 게스트 OS를 설치하지 않는다.

- 이미지에 서버 운영을 위한 실행 파일과 라이브러리만 격리해서 설치한다.

- OS설치가 없기 때문에 이미지 용량이 크게 줄어든다.

- HOST와 OS자원을 공유한다.


도커에는 하드웨어 가상화 계층이 없다.

- 메모리 접근, 네트워크 전송 속도가 기존의 가상 머신보다 압도적으로 빠르다.

- Host PC와 도커 컨테이너는 성능 차이가 거의 없다.


도커는 이미지 생성과 배포에 특화되어있다.

- Git과 같은 소스 형상관리처럼 이미지 버전 관리도 제공하고, 중앙 저장소에 이미지를 올리고 받을 수 있다.

- GitHub와 비슷하게 도커 이미지를 공유하는 Docker Hub를 제공한다.

- 다양한 API를 제공해서 사용자가 필요한 만큼 자동화가 가능하기 때문에 개발을 할때나 서버 운영을 할 때 매우 유용하다.



 Other Contents 

댓글을 달아 주세요

티스토리 툴바