Programming/Docker
Docker와 가상 머신의 차이
dev?
2024. 11. 13. 16:19
반응형
Docker는 컴퓨터의 실제 메모리와 CPU, 디스크 자원을 사용하여 실행됩니다. 하지만 **가상 머신(VM)**과는 다르게 컨테이너라는 가벼운 가상화 기술을 사용하여 운영체제의 커널을 공유하면서도, 각 애플리케이션이 격리된 환경에서 실행될 수 있게 합니다.
Docker는 완전히 독립된 가상 환경을 만들지는 않지만, 다음과 같은 방식으로 가상화와 비슷한 격리 환경을 제공합니다.
Docker의 격리 방식 (컨테이너와 호스트의 관계)
- 커널 공유: Docker 컨테이너는 호스트 운영체제(예: 리눅스)의 커널을 공유합니다. 즉, 가상 머신처럼 운영체제 전체를 새로 설치하지 않고, 호스트 운영체제의 커널을 사용하므로 메모리와 CPU 자원을 덜 차지합니다.
- 프로세스 격리: Docker는 **네임스페이스(Namespaces)**와 **컨트롤 그룹(Cgroups)**라는 리눅스 커널의 기능을 활용하여 각 컨테이너가 독립된 환경에서 실행되는 것처럼 보이도록 만듭니다.
- 네임스페이스(Namespaces): 네임스페이스는 각 컨테이너가 별도의 파일 시스템, 네트워크, 프로세스 ID 등을 가지게 하여 서로 격리된 환경을 제공합니다. 즉, 컨테이너 내부에서는 다른 컨테이너의 프로세스를 볼 수 없습니다.
- 컨트롤 그룹(Cgroups): 컨트롤 그룹은 CPU, 메모리, 디스크 등의 자원 사용을 제한하여 각 컨테이너가 시스템 자원을 효율적으로 사용하도록 관리합니다. 예를 들어, 각 컨테이너가 사용할 수 있는 메모리 양을 제한할 수 있습니다.
Docker와 가상 머신의 차이
- 가상 머신(VM):
- VM은 호스트 운영체제 위에 하이퍼바이저(VMware, VirtualBox 등)를 통해 새로운 운영체제를 설치하여 실행됩니다. 예를 들어, Windows에서 Ubuntu VM을 설치하면 Ubuntu 전체 운영체제가 실행됩니다.
- VM은 독립적인 커널과 OS 파일을 포함하기 때문에 많은 메모리와 CPU 자원을 차지하며 부팅 시간도 깁니다.
- Docker (컨테이너):
- Docker 컨테이너는 호스트 운영체제의 커널을 공유하므로, 가상 머신처럼 운영체제 전체를 새로 설치할 필요가 없습니다.
- 각 컨테이너는 필요한 애플리케이션과 라이브러리만 포함하므로, 가볍고 빠르며 메모리와 CPU 자원을 더 효율적으로 사용합니다.
- 컨테이너는 호스트 OS의 자원을 직접 사용하지만, 격리된 환경에서 실행되기 때문에 다른 컨테이너와 독립적으로 작동합니다.
Docker 컨테이너의 자원 사용
Docker 컨테이너는 다음과 같이 호스트의 실제 자원(CPU, 메모리 등)을 사용합니다.
- 메모리 사용: Docker 컨테이너는 기본적으로 사용할 수 있는 메모리에 제한이 없지만, --memory 옵션을 사용하여 각 컨테이너의 메모리 사용량을 제한할 수 있습니다.
- CPU 사용: Docker는 CPU 사용량도 제한할 수 있습니다. 예를 들어, --cpus 옵션을 사용하여 특정 컨테이너가 사용할 CPU의 양을 조정할 수 있습니다.
- 디스크 사용: 컨테이너는 호스트의 디스크를 사용하며, volume 기능을 사용하여 특정 디렉토리를 공유하거나 데이터의 영속성을 유지할 수 있습니다.
결론
- Docker 컨테이너는 호스트 컴퓨터의 실제 메모리와 CPU, 디스크 자원을 사용하여 실행되지만, 가상 머신보다 가볍고 효율적으로 동작합니다.
- 컨테이너는 격리된 환경에서 실행되지만, 운영체제의 커널을 공유하므로 가상 머신에 비해 더 적은 자원을 차지하며 빠르게 시작하고 중지할 수 있습니다.
따라서 Docker 컨테이너는 완전히 독립적인 가상 공간에서 실행되는 것은 아니지만, 격리된 환경에서 필요한 자원만 최소한으로 사용하여 가상화된 애플리케이션처럼 작동합니다.
출처 : ChatGpt4
반응형