도커/개념 및 실습

01장, 가상화

Jaden Park 2021. 5. 31. 11:48

1.1 가상화 개요

가상화 배경

  • 가상화는 1960년대에 처음 소개되었지만 2000년대에 주목받기 시작
  • 가상화가 주목받기 시작한 이유는 하드웨어 기술의 성장과 보급 증가로 성능이 우수한 하드웨어를 구하기 쉬워졌기 때문
  • 이로 인해 시스템의 리소스 활용률은 낮아졌고, 활용하지 않는 자원을 사용하려는 기술들이 개발되어 현재의 가상화가 되었음

가상화 종류

  • 현재 대부분의 클라우드 서비스들은 다양한 가상화 기술을 사용
    • 서버 가상화
    • 네트워크 가상화
    • 스토리지 가상화
    • 컨테이너 가상화

서버 가상화

  • 서버 가상화는 가장 일반적인 기술이며, 서버를 가상의 머신으로 만들어 사용하는 기술
  • 하드웨어 기술이 발달하면서 리소스 활용률이 낮아져, 리소스 활용률을 높이고자 CPU나 메모리 등을 논리적으로 나누어 사용하는 기술
  • 이를 위해서는 소프트웨어가 필요

네트워크 가상화

  • 최근 가장 인기 있는 가상화 분야
  • 하드웨어 어플라이언스 형태로 존재했던 L2, L3, L7 스위치와 네트워크 방화벽 그리고 보안 장비들을 모두 가상 머신으로 구현가능하고 하나로 통합된 여러 개의 물리적 환경의 장치들을 다시 가상으로 쪼개어 사용할 수 있음
    • 물리적으로 보면 통합된 네트워크이지만 가상으로 네트워크를 나누어 자원으로 사용하고 필요하지 않으면 다시 회수하는 형태로 사용할 수 있음
  • 따라서, 네트워크 가상화를 사용하면 네트워크를 더욱 유연하고 빠르게 제공할 수 있음
  • 현재 대표적인 네트워크 가상화 기술은 NFV(Network Function Virtualization)SDN(Software Defined Nerwork)

스토리지 가상화

  • 스토리지 가상화는 디스크 RAID처럼 여러 개의 물리적인 드라이브를 하나의 논리적인 드라이브처럼 사용하는 기술
  • 디스크를 효율적으로 사용할 수 있을 뿐만 아니라 확장도 쉬워짐
  • 현재 주목받는 스토리지 가상화 기술은 SDS(Software Defined Storage)
    • 대표적인 오픈소스 SDS 스토리지는 Ceph 와 Glusterfs 가 있음

컨테이너 가상화

  • 컨테이너 가상화는 호스트 운영체제에서 논리적인 구역을 만들어 서로 독립적인 애플리케이션을 실행하는 기술
  • 이 논리적인 구역을 컨테이너라 함.
  • 컨테이너에 애플리케이션과 필요한 라이브러리를 추가할 수 있음.
  • 주로 커널 기능을 사용하며, 이는 서버 가상화보다 리소스를 효율적으로 사용하거나 애플리케이션을 빠르게 배포할 수 있음.

1.2 서버 가상화

서버 가상화 개요

  • 서버 가상화는 가장 일반적인 가상화, 가상 머신을 생성할 때 사용하는 기술
  • 가상 머신을 생성하려면 CPU나 메모리와 같은 시스템 자원을 나누어 주는 파티셔닝 기술이 필요
    • 파티셔닝 기술은 하드웨어 파티셔닝과 소프트웨어 파티셔닝이 있음. (현재 소프트웨어 파티셔닝 기술이 주로 사용되고 있음)
    • 소프트웨어 파티셔닝은 소프트웨어를 사용하여 가상 머신에게 시스템 자원을 할당하게 됌. 이때 사용하는 소프트웨어를 하이퍼바이저라고 함

하이퍼바이저

  • 하이퍼바이저는 호스트가 소프트웨어 파티셔닝을 할 수 있게 만들어주는 소프트웨어
  • 역할은 가상 머신의 리소스 관리뿐만 아니라 서로 독립적인 환경을 사용할 수 있도록 리소스간 접근 방지 기능도 가지고 있음
  • 가상 머신도 실제로는 하나의 메모리에 올라가기 때문에 서로 접근이 가능하다고 생각할 수 있지만 보안상 치명적인 문제가 발생할 수 있기에 하이퍼바이저는 이를 방지하는 기능을 가지고 있음.
  • 가장 기본적인 기능은 리소스 관리
  • 가상 머신이 어느 정도의 가상 리소스를 할당 받을지를 정하고 실제 물리적인 자원을 사용할 수 있도록 도와줌.
  • 또한 소프트웨어마다 리소스 사용량을 모니터링 하여 확인할 수 있음.
  • 대중적인 하이퍼바이저는 VMware, Xen. 오픈 소스로는 VirtualBox, KVM 이 있음

1.3 리눅스 컨테이너

리눅스 컨테이너 개요

  • 리눅스 컨테이너는 컨테이너 가상화 기술을 사용
  • 리눅스 컨테이너에는 애플리케이션이나 이에 필요한 라이브러리 및 설정파일 등이 포함
  • 리눅스 컨테이너를 설명할 때 빠지지 않는 것이 가상머신과의 비교

  • 리눅스 컨테이너는 가상 머신과 다르게 가상화 계층이 없고 커널이 별도로 존재하지 않기 때문에 가상 머신에 비해 가볍고 실행 속도 또한 빠름
  • 리눅스 컨테이너는 오래전부터 사용되었지만 극히 일부 기업에서만 사용되었고, 도커가 개발된 이후부터 활발하게 사용되고 있다.
  • 도커는 리눅스 컨테이너를 다루는 도구이며, 요즘은 컨테이너 런타임이라고 한다.

사용하는 기술

  • 리눅스 컨테이너를 사용할 때 가장 핵심 기술 두 가지는 cgroupnamespace

cgroup (Control Group)

  • 프로세스 또는 쓰레드를 그룹화 하여 관리하는 기능과 시스템 리소스(CPU, 메모리, 디스크 입출력 등)의 사용을 제한하는 기술
  • 리눅스 컨테이너는 호스트의 리소스를 공유하여 사용할 수 있음. 이때 cgroup을 사용하여 컨테이너가 사용하는 리소스의 양을 제한할 수 있음
  • 또한 같은 호스트에서 동작하는 서로 다른 컨테이너에 영향을 주지 않도록 막아주는 역할도 하고 있음

namespace (이름공간)

  • namespace에 다수의 오브젝트를 격리할 수 있음
  • 예를 들어 동일한 호스트에서 동일한 PID를 가질 수 없지만 서로 다른 namespace에서는 동일한 PID를 가질 수 있음

namespace의 종류

이름 설명
PID namespace namespace에서 독립적인 PID 사용
Network namespace namespace에서 독립적인 네트워크 기능사용
UID namespace namespace에서 독립적인 UID 사용
Mount namespace namespace에서 독립적인 Mount Point 사용
UTS namespace namespace에서 독립적인 호스트네임 사용
IPC namespace namespace에서 독립적인 IPC 사용

'도커 > 개념 및 실습' 카테고리의 다른 글

1, 2, 3장 연습문제  (0) 2021.06.02
03장-3, 컨테이너 관리  (0) 2021.06.02
03장-2, 컨테이너 실행  (0) 2021.06.01
03장-1, docker 명령 - 이미지 다운로드  (0) 2021.05.31
02장, 도커 개요, 설치  (0) 2021.05.31