목차
가상화 기술
- 가상화 기술 등장 이전
1대의 서버를 하나의 용도로만 사용했다. 남는 서버 공간은 그대로 방치했으며, 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영했다.
이 방법은 안정적이나 비효율적이다.
- 하이퍼 바이저 기반의 가상화 등장
논리적으로 공간을 분할해 VM이라는 독립적인 가상 환경의 서버 이용이 가능해졌다.
하이퍼바이저
호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어이며, 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자이다.
- 네이티브 하이퍼바이저와 호스트형 하이퍼바이저
- 네이티브 하이퍼바이저
하드웨어에 하이퍼바이저를 배치해 하드웨어와 가상 환경을 제어한다.
하이퍼바이저가 하드웨어를 직접 제어하기 때문에 컴퓨팅 자원을 효율적으로 사용 가능하며, 별도의 호스트 OS가 없어 오버헤드가 적으나 환경별로 다른 운영체제가 작동해 가상 환경을 사용하기 위한 오버헤드가 발생한다. 또 여러 하드웨어 드라이버 설치가 어렵다.
- 호스트형 하이퍼바이저
하드웨어에 기본이 되는 호스트 OS를 설치하고 호스트 OS 위에 하이퍼바이저를 설치한다.
일반적인 소프트웨어처럼 호스트 OS 위에서 실행되며 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트하는 방식으로 CPU나 메모리 사용 증가 오버헤드가 크다. 하지만 게스트 OS 종류에 대한 제약이 없고 구현이 쉬워 일반으로 많이 쓰인다.
- 하이퍼바이저 기반의 VM 구조
하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받는다.
논리적으로 분리되어 있기 때문에 Core 1에 해당하는 VM에 오류가 발생해도 Core 2 VM은 정상적으로 작동한다.
도커와 기존의 가상화 기술과의 차이
위 가상화 기술을 기반으로 컨테이너 가상화 기술이 등장했다.
- 컨테이너 방식
애플리케이션 실행 시 호스트 OS 위에 애플리케이션의 실행 패키지인 이미지를 배포하기만 하면 된다. 하이퍼바이저와 게스트 OS가 필요하지 않아 가볍다.
- VM 방식
애플리케이션 실행을 위해 VM을 띄우고 자원을 할당 후 게스트 OS를 부팅해 실행해야 한다. 이 방식은 훨씬 복잡하고 무겁다.
- 공통점
도커 컨테이너와 가상 머신(VM)은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법이다.
도커 컨테이너 격리
같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다. 호스트 OS에 이미지를 올리기 때문에 동일한 커널(Docker engine)을 공유한다.
컨테이너 격리 방법을 배우기 전 리눅스의 Cgroups(control groups), 네임스페이스(namespace)를 알아야 한다.
이 기능들은 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들이다.
- Cgroups
CPU, 메모리, Network Bandwidth, HD i/o 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 애플리케이션의 리소스 사용량이 너무 크면 Cgroups에 집어넣어서 CPU와 메모리 등의 사용을 제한할 수 있다.
- Namespace
하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술이다. 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술이다.
이 기술들을 가져와 도커 컨테이너 격리에 사용한다.
아래처럼 프로세스를 작동시키는데 필요한 CPU, RAM 등만 할당한다.
Cgroup, Namespace 사용 가능한 이유
위에서 봤듯이 Cgroup과 Namespace 기술들을 가져와 도커 컨테이너 격리에 사용한다.
Cgroup과 Namespace는 Linux의 기능인데 현재 내가 도커를 사용하는 컴퓨터의 운영체제는 MacOS이다. 그렇다면 어떻게 MacOS 컴퓨터에서 도커를 사용하는 것인가?
터미널에서 아래 명령어를 입력해 서버 정보를 확인할 수 있다.
docker version
도커 server의 OS가 linux인 것을 확인할 수 있고 이 때문에 Linux 이외의 운영체제에서도 도커를 사용할 수 있는 것이다.
아래 강의를 듣고 작성한 글입니다.
따라하며 배우는 도커와 CI환경 - 인프런 | 강의
이 강의를 통해 도커에 대해서 배울 수 있으며, CI 환경을 구성할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com
'Docker' 카테고리의 다른 글
| Docker | 도커 기초 (0) | 2023.05.07 |
|---|