happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • apply
  • Patch
  • edit
  • 18
  • replace
  • kubernetes
  • 15

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

리눅스(Linux)/컨테이너(Container)

VM과 컨테이너

2023. 7. 29. 00:09

근본적인 차이점은, VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면 컨테이너는 호스트 컴퓨터의 커널을 공유한다는 점이다.

1. 컴퓨터 부팅 과정

  1. BIOS 라고 하는 초기 프로그램을 실행한다.
    • BIOS는 가용 메모리양을 파악하고, 네트워크 인터페이스들을 식별하고, 그 밖에 디스플레이나 키보드, 저장 장치 같은 여러 장치들을 탐지한다.
    • 요즘은 이런 기능의 상당 부분을 UEFI가 담당하고 있다.
  2. 하드웨어 탐지 완료 후, 시스템은 부트로더를 실행한다.
    • 부트로더는 운영체제의 커널 코드를 메모리에 적재해서 실행한다.
    • 커널 코드는 응용 프로그램보다 높은 수준의 권한으로 실행된다.
    • 커널이 메모리나 네트워크 인터페이스 등에 접근할 수 있는 것은 그런 권한 수준 덕분이다.
    • 커널 코드는 CPU에서 기계어 명령의 형태로 실행된다.
    • 초기화 과정에서 커널이 루트 파일 시스템을 마운트하고, 네트워킹 기능을 준비하고, 필요한 시스템 데몬들을 띄운다는 점만 알면 된다.
  3. 커널 초기화가 끝나면 사용자 공간에서 프로그램을 실행할 수 있게 된다.
    • 커널은 사용자 공간 프로그램이 필요로 하는 모든 것을 관리하는 책임을 진다.
    • 커널은 각 프로세스에 메모리 블록을 배정하고, 프로세스가 다른 프로세스의 메모리 블록에 접근하지 못하게 한다.

2. VMM의 등장

  • 보통의 설정에서는 커널이 컴퓨터의 자원들을 직접 관리하지만, VM의 세계에서는 자원 관리의 일차적인 책임은 VMM이 맡는다.
  • 자원들을 분할해서 VM들에 배정하는 것은 VMM이다.
  • 각 VM은 자신만의 커널을 가진다.
  • VMM은 자신이 관리하는 VM들 각각에 일정한 양의 메모리와 CPU 자원을 배정하고, 가상 네트워크 인터페이스를 비롯한 여러 가상 장치들을 설정하고, 각각 그 자원들에만 접근할 수 있는 게스트 커널을 실행한다.
  • 게스트 커널은 자신이 물리적 메모리와 장치들에 직접 접근한다고 생각하지만, 실제로는 VMM이 제공한 추상에 접근하는 것일 뿐이다.
  • 게스트 OS와 그 응용프로그램들이 자신에게 할당된 자원의 경계를 넘지 못하게 하는 것은 VMM의 책임이다.

3. VM의 단점

  • VM을 시동하는 데 컨테이너보다 시간이 훨씬 많이 걸린다.
  • 느리고 번거롭다.
  • 자원 사용 비용이 많이 든다.
저작자표시 비영리 (새창열림)

'리눅스(Linux) > 컨테이너(Container)' 카테고리의 다른 글

[컨테이너] Container Layer 구조 (OverlayFS, 컨테이너 이미지 구조)  (0) 2023.08.15
리눅스의 컨테이너 격리 (cgroups, namespace)  (1) 2023.07.28
[Docker] docker inspect  (0) 2021.09.11
[도커] 스웜모드 & 스웜모드의서비스 장애 복구 & 서비스 컨테이너에 설정 정보 전달(secret,config) & 도커 스웜 네트워크 & 서비스 디스커버리  (0) 2020.09.19
[도커] 쉘스크립트에 도커 명령어 작성 & Docker compose & swarm  (0) 2020.09.16
    '리눅스(Linux)/컨테이너(Container)' 카테고리의 다른 글
    • [컨테이너] Container Layer 구조 (OverlayFS, 컨테이너 이미지 구조)
    • 리눅스의 컨테이너 격리 (cgroups, namespace)
    • [Docker] docker inspect
    • [도커] 스웜모드 & 스웜모드의서비스 장애 복구 & 서비스 컨테이너에 설정 정보 전달(secret,config) & 도커 스웜 네트워크 & 서비스 디스커버리
    happyso
    happyso

    티스토리툴바