티스토리 뷰

학부생 시절에는 Windows 환경에서 Linux를 사용하기 위해서 VM ware, Virtual Box와 같은 가상화 소프트웨어들을 사용해서 가상 머신(Virtual Machine)을 구동시켜 사용했었다.

 

가상 머신의 단점은... 너무 느렸다. 설치부터 부팅까지의 소요 시간이 꽤나 컸다. 무슨 이유에서인지 구동이안돼 재설치라도 하는 날에는 정말 끔찍했었다.

 

때문에 근래엔 리눅스 환경에서 개발할 일이 있으면, Docker를 주로 사용하고 있다.

 

Docker Hub와 같은 Docker Registry에 저장해 놓으면, 어디서든 같은 환경의 리눅스를 손쉽게 사용할 수 있다. 같은 가상화 환경을 제공하는데 VM과 Docker가 왜이리 차이가 나는지 알고 싶어 정리해봤다.

 

가상화는 데스크탑 가상화, OS 가상화, Network 가상화 등 다양한 방법이 존재하는데, 추상적인 가상화 개념과 VM에 관해 정리해보려고한다. 가상화에 대한 더 많은 정보는 여기에서 확인하기 바란다.

 

1. VM(Virtual Machine)

가상 머신이 없었던 시절에는 하나의 하드웨어(물리 서버)에 하나의 어플리케이션(서버)만 구동 시켜 사용했다고 한다. 이렇다보니 두 가지 문제가 발생했는데,

 

  1. 어플리케이션이 하드웨어 종속되어 버려, 저렴하고 고성능의 하드웨어로 자유로운 변경이 불가능함
  2. 가동률이 낮은 어플리케이션을 운용 중인 하드웨어는 많은 리소스를 낭비함

이 두 가지 문제를 해결하기 위해서 가상화(Virtualization) 개념이 등장했다. 메인 이 되는 물리 환경의 리소스를 파티셔닝해 생성된 가상 환경을 가상 머신(Virtual Machine)이라고 한다.

 

정리하면, VM은 위 그림과 같이 하드웨어 위에 구축되어, 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖추고 가상 컴퓨터 시스템으로 작동하는 가상 환경이다.

 

여기서 하이퍼바이저(Hypervisor)가 등장하는데, 하이퍼바이저는 하드웨어의 자원을 가상 머신의 리소스로 분리하고 적절히 프로비저닝해주는 역할을 담당한다. 이렇게 생성된 VM은 독립적인 하드웨어처럼 동작하며, "별도의 OS"를 갖게 된다.

2. VM과 Docker의 차이

VM을 설명하면서 "별도의 OS"를 갖는다고 언급했다. 이 별도의 OS를 Guest OS라 지칭하는데, 이 OS는 경량화 하거나 필요한 부분만 떼온게 아닌 통으로 설치한다.

 

이 때문에, 가상화 소프트웨어로 VM을 구동할 때 오래걸렸던 것이다. 아래 그림을 보면 좀 더 이해하기 쉽다.

 


Docker는 가상화 개념 중 Container 방식을 차용한 것으로, Container 방식은 별도의 Guest OS를 갖지 않는다.

 

Container 방식은 Host OS의 커널을 공유하는데, Docker는 리눅스 OS 기반으로 동작하면서 Docker Engine을 통해 Host OS의 커널을 공유받는다. 그리고, Host OS와 다른 부분만 별도로 패킹해서 동작한다.

 

아니 그렇다면, VM은 바보도 아니고 왜 더 느리고, 무겁고, 유연성이 떨어지는 방식을 사용하게 됐을까? 이는 보안성 때문이다. VM과 같이 별도의 OS를 갖는 방식은 서로 간의 간섭을 최소화에 더 높은 보안성을 가질 수 있다.

 

이에 반해 Docker는 Host OS의 커널을 공유하기 때문에, Host OS가 해킹당할 경우 모든 Container에 접근 가능해진다는 단점이 있다. 또, Host의 커널을 공유하기 때문에, Host의 OS를 따라갈 수 밖에 없는데 현재는 Linux 외의 환경을 제공하지 못한다는 단점도 있다.

 

Docker for Windows가 있지만, Windows 직접 구동하는 방식이 아닌 Windows에 작은 Linux OS를 올린 후에 동작한다고 한다.

3. 마치며

가상화 개념이 요약하기가 애매하고 Docker에 대한 내용을 정리하기 전에 작성한 내용이라 서로간의 비교가 조금 부실한 것 같다. 가상화 개념은 부분 부분이 너무 큰 덩어리라 나중에 기회가 되면 다시 한번 봐야할만한 내용인데, VM과 Docker의 차이점만을 비교하려다보니 굵직한 개념들을 스킵해 버리고 말았다.

 

대표적으로 하이퍼바이저와 관련된 내용인데, 보다보면 리눅스 커널까지 들어간다. 가상화-하이퍼바이저에 관한 내용은 언젠가는 다시한번 정리해야할 내용 같다.


- 참고 자료
https://www.redhat.com/ko/topics/virtualization/what-is-a-virtual-machine
https://www.redhat.com/ko/topics/virtualization/what-is-virtualization
https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://mosei.tistory.com/entry/Docker-Container%EC%9D%98-OS-vs-VM%EC%9D%98-OS

 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함