Docker와 VMware의 차이점

1차 카테고리
Infra
2차 카테고리
Docker
생성 일시
2024/08/25 06:21
최종 편집 일시
2025/02/04 13:57
발행여부
published
최근 업무 인수인계를 위해 Docker를 설명할 일이 있었는데 생각보다 설명하기가 쉽지 않았다.
가상화를 통해서 다른 운영체제 환경에서도 Docker에 설정된 환경을 똑같이 구성해준다.
이게 내가 Docker에 대해 아는 전부였는데 막상 VMware와의 차이점을 설명하기가 어려웠다. 차이가 궁금해져서 글을 작성해보려 한다.

1. Docker가 필요한 이유

먼저 Docker가 왜 필요한지 이유에 대해서 알아보자.
우리는 환경의 차이로 인한 문제들을 많이 겪는다. 운영체제를 예로 들면 Linux(우분투, centOS, 데미안.. ), macOS, Windows 등등 다양하다. 나는 주로 macOS, Windows을 사용했지만, 이 두 운영체제에서 파일을 주고받을 때마다 호환성 문제로 불편함을 겪었다.
예를 들어, 윈도우에서 압축한 파일을 macOS에 압축을 풀었을 때, ㅇㅣㄱㅓㅇㅗㅐ... 이런식으로 파일 이름이 깨지는 경우를 많이 볼 수 있다. 또한 증권사 웹 사이트의 사용이 다양한 보안 프로그램들이 MacOS는 설치가 제대로 되지 않아 사용에 불편함을 많이 경험했다.

웹 개발 환경 차이

웹 개발에서 새로운 환경에서 프로젝트를 실행하려고 npm install을 실행해도 패키지가 제대로 설치되지 않는 경우가 종종 발생한다. 이는 다양한 원인에 의해 발생할 수 있지만, 주로 Node.js 버전 차이가 가장 일반적인 원인일 가능성이 높다고 생각한다. 따라서 노드 버전을 프로젝트의 환경에 맞게 변경해주기 위해 NVM을 많이 사용한다. 노드 버전이 오래된 노후화된 프로젝트의 경우, Python 2.x 로 셋팅을 해줘야 패키지가 정상적으로 설치는 경우도 있다.(패키지 일부 모듈이 Python 2.x에 의존)
해당 에러들을 해결하기 위해 많은 시간을 구글링에 투자해야 했다. 이처럼 개발 환경을 맞추는 일은 번거롭고 피곤한 작업이다. 하지만 도커(Docker)가 이런 문제를 효율적으로 해결해준다. 도커 파일에 필요한 환경 설정을 정의하고 이를 기반으로 컨테이너를 실행하면, 도커만 설치되어 있다면 어떤 운영체제에서든 동일한 환경으로 프로젝트를 실행할 수 있다.
이는 도커가 컨테이너 기술을 통해 애플리케이션과 그 실행 환경을 하나로 감싸서 개발 환경과 서버 환경을 일치시켜주기 때문이다. VMware와의 차이점을 살펴보면서 더 깊이 이해해보자.

2. Docker, VMware 차이

글을 쓰기 이전에 제일 먼저 궁금했던 내용이다. 둘 다 가상화 기술을 쓰는데 도커와 VM의 차이는 무엇일까?

리소스 사용량

VMware, Virtual Box와 같은 가상화 플랫폼은 운영체제를 포함한다는 것에 차이가 있다. 따라서 컴퓨터의 리소스를 많이 사용한다. 이전 Intel 맥북을 사용할 때, VM만 돌리면 속도가 느려지는 현상이 있었다.
실제로 M3 맥북 프로에서 VM를 사용할 때, 프로세스가 점유하는 메모리가 무려 25GB에 달한다.
다음 그림에서 왼쪽이 VM, 오른쪽 Docker의 구조이다. VM에서는 OS를 포함하고, Docker 기반의 Container에서는 OS를 포함하지 않고 컨테이너 엔진이 설치된 Host OS를 공유한다. Host OS를 포함하지 않기 때문에 Docker가 더 가볍고 빠르다.
드림코딩 Docker 영상 참고

Host OS 사용 유무

Docker는 HostOS를 사용한다. 이를 위해 LinuX Containers라는 리눅스 커널 기술이 이용된다. 이를 바탕으로 리눅스 컨테이너를 만들고, 리눅스 컨테이너 상에 별도로 구성된 파일 시스템에 실행할 수 있는 기술이다. 초기 Docker는 리눅스 컨테이너스를 사용했지만, 현재는 Docker에서 별도의 컨테이너 기술을 만들어 쓴다고 한다.
아래 블로그에 해당 내용이 설명되어있다.(어려움 주의…)

3. Docker 활용

앞서 설명한 것처럼 개발 환경의 불일치를 해결하는 데 도커를 활용할 수 있다. 또한 도커의 컨테이너는 독립적으로 실행이 가능하다는 장점이 있어 마이크로 서비스 아키텍처(MSA)에 적합하다.
MSA는 소비자의 니즈가 빠르게 변화하는 상황에서 유용한데, 서비스가 방대해질수록 작은 코드 변경에도 배포 시간이 많이 소요되기 때문이다. 이러한 문제를 해결하기 위해 세부 서비스를 빠르게 업데이트할 수 있는 마이크로 서비스 구조가 등장하게 되었다.

일관된 개발 환경 제공

운영체제나 의존성 버전 차이로 인해 로컬 개발 환경과 실배포 환경 간의 불일치 해결
컨테이너 이미지를 공유하여 협업 속도를 높일 수 있음.

마이크로 서비스 아키텍쳐(MSA)

모놀리틱 구조(Monolithic Architecture): 하나의 서버에 모든 기능을 넣음. 일반적으로 모노레포라고 줄여서 말한다.
마이크로 서비스 아키텍쳐(MSA): 여러 서버에 각 기능을 분산해 놓은 후, REAT API 등으로 통신을 통해 전체 서비스를 운영.

정리

도커와 vmware 차이
VM: OS를 포함한 무거운 아키텍처.
Docker: 컨테이너 엔진으로 Host OS를 공유, 빠르고 가벼움.
Docker는 단일 이미지만 관리하면 되어 매우 편리하며, 배포 후 장애가 발생하더라도 이전 버전의 이미지로 쉽게 롤백할 수 있다. 반면 FTP 배포 방식은 사전 백업이 필요하고, 배포 후 서버에서 애플리케이션 프로세스를 재시작하는 과정이 복잡하다.

 Reference