VM ( Virtual Machine )
구조
- VM은 하이퍼바이저를 사용하여 하드웨어를 가상화
- 하이퍼바이저는 가상화를 가능하게 하는 소프트웨어
- 이는 물리적 하드웨어와 가상 머신(VM) 사이에서 작동하며, 여러 개의 VM이 동일한 물리적 하드웨어 위에서 독립적으로 실행될 수 있도록 함.
- 각 VM은 완전한 운영 체제를 포함하며, 하이퍼바이저는 이러한 VM들이 하드웨어 자원을 효율적으로 공유하고 관리할 수 있도록 도움.
- Type 1 (네이티브 하이퍼바이저): 이는 직접 하드웨어 위에 설치되며, 운영 체제 없이 독립적으로 작동함.
- ex. VMware ESXi, Microsoft Hyper-V, Xen
- Type 2 (호스티드 하이퍼바이저): 이는 기존 운영 체제 위에 설치되며, 일반적인 애플리케이션처럼 작동함.
- ex. VMware Workstation, Oracle VirtualBox
- Type 1 (네이티브 하이퍼바이저): 이는 직접 하드웨어 위에 설치되며, 운영 체제 없이 독립적으로 작동함.
- 각 VM은 완전한 게스트 운영 체제, 필요한 라이브러리, 애플리케이션을 포함
- 이로 인해 각 VM은 물리적 하드웨어에서 독립적으로 작동
리소스 격리:
- VM은 완전한 OS 격리를 제공
- 각 VM은 독립적인 환경에서 실행되므로, 다른 VM의 작업에 영향을 받지 않음
리소스 사용량:
- VM은 전체 운영 체제를 실행하기 때문에 상대적으로 많은 리소스(디스크 공간, 메모리, CPU 시간)를 사용
장점:
- 완전한 OS 격리: 각 VM은 완전히 독립된 환경을 제공하고, 이로 인해 보안과 격리 측면에서 강력함
- 다양한 OS 지원: 다양한 운영 체제를 동시에 실행할 수 있음
단점:
- 리소스 사용량: 높은 리소스 사용량과 느린 시작 시간
- 스케일링 제한: 물리적 서버의 리소스 제한으로 인해 스케일링에 한계가 있음
Container
구조:
- 컨테이너는 OS 수준의 가상화를 제공
- 가상화는 물리적 하드웨어의 기능을 소프트웨어적으로 구현하고, 이를 여러 사용자나 환경에서 공유할 수 있게 하는 기술
- 상화를 통해 하나의 물리적 시스템을 여러 개의 독립된 가상 환경으로 분리할 수 있으며, 이는 서버, 스토리지, 네트워크 등 다양한 IT 자원에서 사용됨
- 자원 효율성 증대: 여러 가상 머신이 하나의 물리적 서버에서 실행되어 하드웨어 자원을 최대한 활용할 수 있음
- 유연한 리소스 관리: 가상 머신은 필요에 따라 쉽게 생성, 수정, 이동할 수 있어 리소스 관리가 유연해짐
- 비용 절감: 물리적 인프라의 수를 줄임으로써 운영 비용과 유지 보수 비용을 절감할 수 있음
- 격리 및 보안: 각 가상 머신은 서로 독립적으로 작동하여 격리되어 있기 때문에 보안성이 향상됨
- 복구 및 이동성: 가상 머신은 쉽게 백업하고 다른 서버로 이동할 수 있어 재해 복구 및 데이터 관리가 용이함
- 컨테이너는 호스트 OS의 커널을 공유하지만, 프로세스, 파일 시스템, 네트워크 등을 격리
Namespace와 cgroup:
- Namespace:
- 컨테이너는 Namespace를 사용하여 프로세스, 네트워크, 사용자 ID 등을 격리
- 이는 컨테이너가 호스트 OS와 동일한 커널을 사용하면서도 독립적인 환경을 유지할 수 있게 해줌
- cgroup (Control Groups):
- cgroup은 리소스 사용량(메모리, CPU, 디스크 I/O 등)을 관리하고 제한
- 이를 통해 시스템의 각 컨테이너가 사용할 수 있는 리소스의 양을 제어할 수 있음
리소스 사용량:
컨테이너는 VM보다 훨씬 가벼우며, 더 적은 리소스를 사용하여 더 빠르게 시작하고 실행할 수 있음
장점:
- 효율적인 리소스 사용: 가벼운 구조로 인해 리소스를 효율적으로 사용함
- 빠른 시작 시간: 컨테이너는 VM에 비해 시작 시간이 훨씬 빠름
- 이식성: 애플리케이션과 그 의존성을 함께 패키징하기 때문에 다양한 환경에서 일관된 운영이 가능
단점:
- 보안 문제: 컨테이너는 격리 수준이 VM보다 낮아 보안 취약점이 될 수 있음
- 호스트 OS 의존성:
- 공유된 커널 구조: 컨테이너는 호스트 운영 체제의 커널을 공유. 이는 컨테이너가 호스트 OS에 설치된 커널을 기반으로 실행된다는 것을 의미함. 따라서, 컨테이너는 호스트 OS와 같은 유형의 커널을 사용해야 함.
- 이식성의 제한: 호스트 OS의 커널을 공유한다는 점은 컨테이너가 특정 OS에 종속될 수 있음을 의미함. 예를 들어, 리눅스 기반 컨테이너는 리눅스 커널을 사용하는 호스트에서만 실행될 수 있음. 이는 다른 운영 체제에서의 실행을 제한.
- 보안 측면의 영향: 컨테이너가 호스트 OS의 커널과 직접적으로 상호작용한다는 점은 보안상의 고려사항을 낳음. 하나의 컨테이너에서 발생한 취약점이 호스트 OS의 커널에 영향을 미칠 수 있으며, 이는 다른 컨테이너들에도 영향을 줄 수 있음.
'DevOps > Docker' 카테고리의 다른 글
[도커]도커 이미지 만들기(Dockerfile, commit) (0) | 2021.06.13 |
---|---|
[도커]도커에서 레디스 사용하기 (0) | 2021.06.13 |
[도커]docker image rm vs docker rmi (0) | 2021.06.04 |
[도커]헷갈리는 기본 명령어(create, start, run, stop, rm) (1) | 2021.06.02 |
[도커]네트워킹 (0) | 2021.06.02 |