IT/CS

[Container] 가상 머신과 컨테이너(feat. Docker)

Terriermon 2021. 6. 1. 13:56

한 장 요약

 

가상화

물리적인 하드웨어(HW) 장치를 논리적인 객체로 추상화 하는 것

- 프로세서(CPU), 메모리(Memory), 스토리지(Storage), 네트워크(Network) 등의 컴퓨팅 자원을 쪼개거나 합쳐서 사용

- 자원을 효율적으로 사용 및 분산처리 가능

 

가상 머신(VM)

가상화를 통하여 구현되는 복제된 컴퓨팅 환경, 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터

- 가상 머신이 제공하는 환경과 자원에 제한을 받음

- 하나의 물리 자원(컴퓨터) 위에 하나의 환경(OS)만 있는 것을 효율화 ▶ 가상화층 생성 ▶ OS 새로 설치

 

시스템 가상 머신(하드웨어 가상 머신)

- 완전한 운영체제(OS) 제공

- 물리 컴퓨터 다중화(multiplex), 모든 하드웨어 자원 가상화

게스트 운영 체제
같은 물리 컴퓨터에서 실행되는 각각의 운영 체제를 가지는 여러 개의 가상머신
- 다른 장치가 충돌을 피하기 위해 각 장치에서 실행하기 위한 서버 통합(server consolidation)에서 사용
- 제품 품질의 고립 (QoS 고립)

- 하이퍼바이저(가상 머신 모니터 VMM) ▶ 하드웨어 또는 호스트웨어 체제 위에서 그대로 실행 가능

하이퍼바이저
- 가상화를 제공하는 소프트웨어 계층
- 호스트 컴퓨터에서 다수의 운영 체제를 동시에 실행시키기 위한 논리적 플랫폼
- VMWare, Red Hat(KVM), Paraellels, Oracle Virtualbox 등 다양한 하이퍼바이저 존재 ▶ OpenStack을 설치하기 위해서는 Red Hat의 KVM(Kernel-based Virtual Machine)이 표준

☁ TYPE 1 - 베어메탈 기반 가상화: 하이퍼바이저가 하드웨어를 직접 제어하여 게스트 OS를 올리는 방식
☁ TYPE 2 - 호스트 기반 가상화: 하이퍼바이저가 일반 프로그램과 같이 호스트 운영체제에서 구동

장점

✔ 같은 컴퓨터에서 운영 체제가 서로 독립적 ▶ 멀티부팅 어려움X, 관리 용이, 테스트 환경 적합

✔ 실제 컴퓨터가 제공하는 것과 다른 형태의 명령어 집합 구조(ISA) 제공

단점

✔ 독립적인 플랫폼 생성 시 OS 작업 반복 ▶ 확장성 감소

✔ 자원이 유동적으로 관리되지 않아 비효율적

 

프로세스 가상 머신

- 응용 프로그램 가상 머신 ex) 자바 가상 머신 (JVM)

- 운영 체제 안에서 일반 응용 프로그램을 돌리고 단일 프로세스를 지원

- 플랫폼 독립성 허용, 기초가 되는 하드웨어나 운영 체제의 상세한 부분을 가져오는 독립 프로그래밍 환경 제공

 

 

컨테이너

실행의 독립성을 확보하는 운영체계 수준의 격리 기술
▶ 개별 소프트웨어의 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 다른 환경의 간섭을 막음

- 애플리케이션과 실행에 필요한 라이브러리, 바이너리, 구성 파일 등을 패키지로 묶어서 배포
▶ 운영 환경이 바뀌어도 실행에 필요한 파일이 같이 존재
▶ 오류 최소화

- OS 레벨에서 프로세스 격리 ▶ 모듈화된 프로그램 패키지 수행

- 📢 운영체제가 포함되어 있지 않음 ▶ 가벼움

 

장점

✔ 가상머신보다 가벼움⬆, 리소스 효율성⬆, 이식성⬆, 회전 속도⬆ ▶ 하나의 물리 서버에 더 많은 응용 프로그램을 더 쉽게 구동

 

Docker

컨테이너의 대표적인 기술

- Docker 컨테이너는 여러 image(하나의 패키지로 묶인 바이너리)들의 레이어로 구성

- 개발한 애플리케이션 실행에 필요한 모든 것이 포함된 Docker 이미지 작성 ▶ Docker 설치 환경에서 모두 작동

Docker Image
애플리케이션 실행에 필요한 파일이 저장된 디렉토리
Base image: 컨테이너의 운영체제 포함 ▶ 호스트의 OS와 다를 수 있음
> 완전한 운영체제 X
> 파일 시스템과 바이너리만 포함
> Base image 위에 다수의 이미지가 올라감

- 유니온 파일 시스템: 각각의 레이어 별로 하나의 복사본만 local에 보관 가능

ex) 컨테이너1: a, b, c 레이어
     컨테이너2: a, b, d 레이어
     ▶ local 또는 repository: a, b, c, d 각각 하나의 복사본만 저장

ex) 위 그림에서 Image2는 Image1과 같은 부모 이미지 공유 + 2개의 레이어를 부가적으로 가짐

Docker 기능

- Build: Docker 이미지 생성

  • 애플리케이션 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS, 네트워크 설정 등을 Docker 이미지로 생성
  • 하나의 이미지 = 하나의 애플리케이션 ▶ 여러 컨테이너를 조합하여 서비스 구축
  • Docker 명령어로 수동 생성 또는 Dockerfile로 설정 파일을 생성하여 자동으로 이미지 생성 ▶ 지속적인 관리를 위해서는 Dockerfile 권장

- Ship: Docker 이미지 공유

  • Docker 이미지는 Docker 레지스트리에서 공유 가능
  • Base Image에 미들웨어, 라이브러리, 애플리케이션 등을 넣은 Image를 겹쳐 독자적인 Docker Image 생성
  • Docker hub에 자유롭게 이미지 공개 가능

- Run: Docker 컨테이너 작동

  • Docker Image가 있으면 Docker가 설치된 환경이라면 어디서든 컨테이너 작동 가능
  • Docker Image를 가지고 여러 개의 컨테이너 가동 가능

'IT > CS' 카테고리의 다른 글

[Web] WEB과 WAS  (0) 2021.06.02
[Network] TCP/IP 프로토콜  (0) 2021.06.01
[프레임워크] Vue.js  (0) 2021.05.31
[프로그래밍 언어] C++과 JAVA  (0) 2021.05.30
[DB] 데이터베이스 기초  (0) 2021.05.27