1. Docker란?
Docker는 "컨테이너(Container)" 기반의 가상화 기술을 말한다.
이때, 컨테이너는 리눅스 가상화 기술로, 호스트의 커널을 공유하며, 격리된 환경에서 실행하기 때문에 가볍고 빠르다.
가상머신 방식과 컨테이너 방식을 비교해 보자.
2. 가상머신(VM) 방식
가상머신은 집 한 채를 새로 짓는 것과 같다. 손님이 오면(애플리케이션을 실행하려면) 새 집을 짓고, 전기나 수도나 가구(운영체제, 라이브러리, 애플리케이션)를 전부 준비해야 한다.
VirtualBox나 VMware로 Ubuntu VM을 설치한다고 하면, 윈도우(호스트 OS) 위에 Ubuntu(게스트 OS)를 통째로 올린다.
이때, CPU, 메모리, 디스크를 모두 분리해서 따로 할당하기 때문에 즉, 무겁지만, 완전히 독립적인 환경이 만들어지는 것이다.
즉, "운영체제를 하나 더 돌리는 방식"이라서 리소스를 많이 써서 무겁고, 느리지만 독립성이 높다.
3. 컨테이너(Container) 방식
컨테이너는 "하나의 아파트 건물(호스트 OS)" 안에 여러 개의 "원룸(컨테이너)"을 만드는 것과 같다.
건물(커널, 공용 리소스)은 같이 쓰지만, 각 방(컨테이너)은 문이 닫혀 있어서 서로 간섭하지 않는다.(격리된 환경에서 실행)
필요한 가구(애플리케이션+라이브러리)만 갖다 놓으면 바로 생활이 가능하다.
예를 들어 Docker로 Python 웹 서버를 실행하면,
호스트의 Linux 커널을 그대로 사용하며, Python 실행 환경과 필요한 패키지만 따로 격리해서 담는다.
그래서 실행 속도가 빠르고 용량도 작다. (수 MB 수준)
같은 호스트에서 수십~수백 개의 컨테이너를 실행 가능하다.
즉, "운영체제 전체가 아니라 필요한 프로그램만 담아 실행" 하므로 가볍고 빠르며 배포가 쉽다.
| 구분 | 가상머신(VM) | 컨테이너(Container) |
| 실행 방식 | OS 전체 복제 | 커널 공유, 프로세스 격리 |
| 성능 | 무겁고 느림 | 가볍고 빠름 |
| 시작 시간 | 수 분(부팅 필요) | 수 초 이하 |
| 리소스 사용 | 수 GB(메모리, 디스크) | 수 MB~수백 MB |
| 예시 | VirtualBox, VMware | Docker, Podman, Kubernetes |
4. 아주 간단한 예시
VM: 윈도우에서 "리눅스 VM"을 켜고, 그 안에서 python server.py 실행-> 리눅스가 먼저 부팅되고, 그 위에서 파이썬 서버가 돌아감.
컨테이너: 윈도우에서 Docker로 바로 실행
docker run -d -p 8080:80 nginx
-> 몇 초 안에 nginx 웹 서버가 동작(운영체제 전체를 부팅할 필요x)
따라서 Docker는 가상머신과 유사하지만 다르다.
