Skip to Content
Sunbeen's Blog

VM vs Container

image.png

🔶 Virtual Muchine

  • 기본적으로 어떤 운영체제가 됐던 호스트 OS (필수)
  • 호스트 OS 위에 VM을 가상화 시켜주기 위해서 여러 하이퍼바이저 존재
  • 하이퍼 바이저를 이용해 원하는 운영체제로 게스트OS를 올려서 여러 VM들을 만들 수 있음
  • 게스트OS도 호스트OS와 똑같이 하나의 OS 를 독립적으로 가지고 있는 것처럼 사용가능
  • 각각의 OS가 올라가는 구조
  • 보안적으로 VM은 게스트 OS 가 뚫려도 다른 게스트OS나 호스트 OS와 완전 분리

🔹 자원 증량이 필요할 경우

  • VM은 A와 B 모듈은 괜찮지만 모듈 C에 부하가 가는 상황이 발생하면, VM을 하나 더 띄워서 사용하게 되는데, 필요없는 A, B 서비스도 함꼐 복사하게 되고, 자원량을 더 많이 사용하게 됨

image.png

🔶 Container

  • 한 OS를 공유하는 구조 (컨테이너 속도 빠름)
  • 컨테이너를 리눅스 OS에서 윈도우용 컨테이너를 사용 불가능
  • 보안상 한 컨테이너가 뚫려서 OS 영역에 접근을 하게 되면 다른 컨테이너들도 위험해질 수가 있습니다.

🔹 예시 - 상황

  • 리눅스마다 버전이 존재하고 리눅스 버전에 따라 기본적으로 설치되는 라이브러리들이 달라짐
  • 만약 리눅스 6 버전에서 개발을 하다보면 리눅스 6 버전에 설치되어 있는 OpenJDK 라이브러리를 자연스럽게 사용하게 됨
  • 개발이 완료되고 이걸 리눅스 7 버전에서 띄우게 된다면 버전 문제 발생 확률이 높아짐

image.png

🔹 컨테이너 이미지

  • Docker를 사용하여 한 서비스와 그 서비스가 돌아가는 데 필요한 라이브러리들이 같이 존재한 이미지 생성 가능합니다
  • 리눅스 7 버전에 다른 라이브러리들이 있더라도 Docker만 설치되어 있으면
  • 컨테이너 이미지를 가져와서 사용했을 때 A 서비스는 자신의 이미지 안에 있는
  • OpenJDK 라이브러리를 사용하기 때문에 안정적으로 시스템을 구동할 수가 있습니다.
  • Docker는 여러 컨테이너에서 호스트의 자원을 분리해서 사용할 수 있게 하면서 리눅스 고유 기술 namespace와 cgroup을 사용해 컨테이너의 격리를 수행함.
    • namespace : 커널에 관련된 영역 분리
    • cgroup : 자원에 대한 영역을 분리

image.png

🔹 POD

  • 쿠버네티스는 모듈별로 묶어서 각각의 컨테이너에 담는 걸 전제로 만들어 졌다.
  • 각 모듈 별 최적화된 개발 언어를 사용하는 것이 좋다.
  • 여러 컨테이너를 묶은 배포 단위
  • 필요한 파드만, 확장 가능
Note

본 문서는 인프런의 초급자를 위한 【대세는 쿠버네티스】 강의를 바탕으로 학습한 내용을 정리한 것입니다.

Last updated on