도커와 가상 머신의 차이점을 알아보자
Virtual Machine
하나의 컴퓨터에 여러 개별 컴퓨터가 있는 것처럼 보이게 소프트웨어적으로 구현한 것으로 가상 시스템에는 기본 운영체제가 필요하다. 하이퍼바이저 기술을 사용하는데 이는 호스트 컴퓨터에서 다수의 운영체제(OS)를 동시에 실행하기 위한 논리적 플랫폼이다. 시스템에서 호스트 하드웨어의 프로세서, 메모리, 리소스가 있는 것처럼 보이기 때문에 가상 머신은 자체 프로그램을 실행할 수 있고 하이퍼바이저 는 이러한 리소스를 가상 시스템에 할당한다.
Docker
도커는 리눅스의 응용프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리한다. 도커 컨테이너는 소프트웨어와 이를 실행하기 위한 환경들을 모두 포함해 파일 시스템 안에 감싸서 실행중인 환경과 관계없이 언제나 동일하게 실행되게 한다. 이렇게 애플리케이션 실행에 필요한 종속 항목과 코드를 함께 포함하는 경량 패키지를 컨테이너라고 한다. 또한 도커는 Cgroups, Namespaces 리눅스 커널 기능을 사용해서 애플리케이션을 작동시키는데 필요한 양만큼 자원을 할당하여 컨테이너들을 독립적으로 실행한다.
🔥 Cgroups : CPU 시간, 시스템 메모리, 네트워크 대역폭, HD i.o 등 프로세스 그룹의 시스템 자원 사용량을 관리한다. 어떤 어플리케이션의 사용량이 많으면 Cgroup에 넣어서 CPU와 메모리 사용량을 제한할 수 있다. 즉, 프로세스들의 자원 사용량을 제한하고 격리시키는 역할을 한다.
🔥 Namespaces: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술로 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술이다.
Docker vs VM
공통점
- 도커 컨테이너와 가상 머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법
차이점
- 도커 컨테이너는 하이퍼바이저의 게스트 OS가 필요하지 않아서 더 가벼움
- 도커는 주체가 되는 호스트 OS에서 커널을 공유받음
- 도커 컨테이너는 애플리케이션을 실행할 때 호스트 OS위에 애플리케이션의 이미지 만 사용
- VM은 애플리케이션을 실행하기 위해 VM을 띄우고, 자원을 할당하고 게스트 OS를 부팅하여 복잡
위의 공통점과 차이점을 보면 결국 도커는 게스트 OS가 필요하지 않고 호스트 OS의 커널을 공유받아 사용하기 때문에 VM보다 가볍고 부팅도 빠르니까 도커가 좋을 것 같다. 하지만, 반대로 말하면 호스트 OS의 커널을 공유받기 때문에 호스트 OS가 불안정해지면 컨테이너에도 영향을 줄 수 있고 호스트 OS와 같은 컨테이너만 올릴 수 있다. 반면에, VM은 호스트 OS와 관계 없이 게스트 OS를 설정할 수 있기 때문에 이러한 점에서는 유리하다. 즉, 상황 별로 사용할 수 있는 것이 다르므로 올바르게 선택하는 것이 중요하다.
출처
'개인 공부' 카테고리의 다른 글
정적 팩토리 메서드 (0) | 2022.11.21 |
---|---|
Logback.xml 동일 패키지 내 다른 레벨 처리 (2) | 2022.11.10 |
Garbage Collector 동작원리 (0) | 2022.11.01 |
프로토 타입 패턴 (0) | 2022.10.30 |
String, StringBuilder, StringBuffer 사용 경우 (0) | 2022.10.28 |