Thinking Out Loud

[IT Infra 기초] 가상화 (OS, 가상머신, 컨테이너, 도커) 본문

IT Infra

[IT Infra 기초] 가상화 (OS, 가상머신, 컨테이너, 도커)

주롱주롱 2021. 10. 12. 16:22

# 가상화

1. OS

2. 가상머신

3. 컨테이너

4. 도커

5. 클라우드  ··· (나중)


# 가상화

- 컴퓨터 시스템에서 물리 리소스를 추상화하는 것

   (물리 리소스 : 서버, 네트워크, 저장소 등)

- Virtual, 가상 → '실제로 존재하는 것과 같다', '사실과 거의 같다'

 

1. OS

- 하드웨어를 의식하지 않고 애플리케이션을 실행할 수 있는 운영체제

- 가상화 기술 중 하나

OS 등장 이전 OS 등장 이후
- 하드웨어를 의식한 프로그래밍 필요, 매우 복잡한 작업
- HW의 사양을 고려해서 프로그램 작성 필요
- 메모리 관리, 멀티 태스크, 파일시스템 등도 별도 구현 필요
- 하나의 프로그램에서 발생한 오류가 컴퓨터 전체를 정지시킬 가능성 有
- HW 추상화 → 컴퓨터에 연결된 기억 장치나 NW를 통한 데이터 교환이 HW를 의식하지 않고 이루어짐
- 메모리의 물리 주소, 하드디스크의 물리 주소를 고려하지 않고 프로그램 개발 가능
- 가상 메모리 사용 → 프로세스 및 OS 커널의 메모리 공간 분리 ⇒ 하나의 프로그램이 실패해도 시스템 전체에 영향 X

 

2. 가상머신

- 컴퓨팅 환경을 SW로 구현한 것. 컴퓨터 시스템을 에뮬레이션하는 SW

# 가상머신 방식 : 호스트 OS형 vs 하이퍼바이저형

호스트 OS형 하이퍼바이저형
- 윈도우즈나 리눅스 등의 호스트 OS 상에 가상화 SW를
  설치해서 이용하는 것
- VMware Server, MS Virtual Server 등
- SW를 에뮬레이터하는 것
  (에뮬레이터 : 다른 프로그램·장치 모방·복제)
- 성능면에서 제한 有
   ⇒ 하이퍼바이저형 등장
- 하드웨어상에서 직접 가상화 SW를 실행하고 그 위에 가상
  머신을 동작시키는 기술
- VMware vSphere, Hyper-V, Xen, KVM 등
- 호스트 OS를 거치지 않아 호스트형보다 성능 우수
- 서버 가상화의 대표 기술

# 하이퍼바이저형 가상화 구조 : 완전가상화 vs 준가상화

완전가상화 준가상화
- 장점 : 물리머신상에서 동작하는 OS나 드라이버를 그대로
          게스트로 이용 가능
- 단점 : SW로 에뮬레이션 → 성능 저하 문제
           ⇒ 준가상화 등장
- 실존하는 HW를 에뮬레이션 X
- 가상환경용 가상 HW를 SW적으로 에뮬레이션
- 가상환경에서 동작시키는 게스트 OS마다 준가상화 전용
  드라이버
준가상화용으로 최적화된(개조된) OS 커널
  이용해야 했었음
   → 이후 인텔, AMD 등의 프로세서 제조사가 가상 HW 지원
       가능 (Intel VT-x / VT-d / VT-c, AMD V/Vi 등)
   → 하이퍼바이저도 지원
현재는 완전가상화가 자리잡음

 

3. 컨테이너

- 리소스가 격리된 프로세스

- 하나의 OS상에서 여러 개를 동시에 가동 가능

# 가상머신 vs 컨테이너

- 가상머신(VM)과의 차이점 : 각각 독립된 루트 파일 시스템, CPU/메모리, 프로세스 공간 등을 사용 가능

하이퍼바이저형 가상화 컨테이너

# 컨테이너의 역사

1) 1970년대 chroot 개발 (빌 조이(Bill Joy))

    컴퓨터 비쌈 → 상용 환경과 개발 환경 별도로 준비 시 비용↑ → 하나의 컴퓨터로 상용, 개발 환경 함께 사용

    → 문제 : 잘못된 파일 변경 및 삭제 위험 ⇒ chroot 등장

    # chroot ?

       - 프로세스가 OS의 루트 디렉토리 아래에 있는 특정 계층에 접근 못하도록 하는 기능

       - 현재도 다양한 분야에 적용

          ex) 리눅스의 레스큐 모드(Rescue Mode), FTP에서 사용자 단위로 접근 범위 한정 기능,

               포스트픽(Postfix)이나 바인드(BIND) 등으로 접근할 수 있는 디렉토리 한정 기능 등

2) 1990년대 FreeBSD jail 등장

    - 특정 디렉토리 이하를 루트 디렉토리처럼 보이게 하는 chroot 개념 추가

      → 애플리케이션의 프로세스 격리 가능

3) 2000년대 솔라리스(Solaris) 컨테이너 - 컨테이너 기능 제공

   (빌 조이가 소속되있던 선 마이크로시스템즈(Sun Microsystems))

   → 오라클 솔라리스 11에선 "오라클 솔라리스 존(Solaris Zone)"

 

4. 도커

- 2013년 파일시스템과 프로세스 분리 기능 추가

  → 파일시스템 이미지의 패키징과 버저닝이 가능해짐

  → 컨테이너 이미지 공유 가능한 '도커' 등장

도커의 기본 기능

- 2008년 도커 회사 개명 전 '닷클라우드(dotCloud)' 설립

  목적 : 언어에 의존하지 않는 PaaS 구축

# 닷클라우드의 PaaS

- 개발한 애플리케이션을 클라우드에 배포해서 실행하는 구조

→ 애플리케이션 관련 프레임워크, 라이브러리 등의 버전 불일치

    → 로컬에서 실행된 프로그램이 클라우드에서는 실행되지 않는 문제 발생

    ⇒ 클라우드 내부 구조로 개발했던, 애플리케이션 실행 환경을 자동 구축해주는 '도커 이미지'라는 기술을 클라우드

        이외의 환경에서도 사용할 수 있게 오픈소스로 공개

- 도커 허브 : 도커 이미지를 공유할 수 있는 레지스트리

# 도커의 장점 (vs 가상머신)

- 컨테이너 → 호스트 OS와 OS 커널 공유 ⇒ 컨테이너 실행 · 정지 속도가 빠름

- 호스트 OS의 커널 공유 → VM만 사용하는 경우와 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테이너 실행 가능

   ⇒ 리소스를 한 곳에서 쉽게 관리 가능

- 라이브러리 · 프레임워크 등을 도커 이미지로 묶어서 공유 가능 → 특정 환경에서는 재현되지만, 자신의 개발 환경에서는 재현되지 않는 문제가 발생하기 어려움 ⇒ 효율적인 버그 수정 가능

 

5. 클라우드  ··· (나중)

 


참고 : 야마자키 야스시 외 3, 「그림으로 공부하는 IT 인프라 구조」, 제이펍

'IT Infra' 카테고리의 다른 글

[IT Infra 기초] 동기/비동기  (0) 2021.10.19
[IT Infra 기초] 직렬/병렬  (0) 2021.10.18
[IT Infra 기초] 웹 데이터 흐름  (0) 2021.10.12
[IT Infra 기초] OS 커널  (0) 2021.10.12
[IT Infra 기초] 프로세스와 스레드  (0) 2021.10.12