-
Docker (1) - 가상화 기술Infra/Docker 2024. 1. 24. 20:35
1. 엔터프라이즈 환경에서 구동되는 다양한 서버
- 서버는 일반적으로 하드웨어에서 실행 중인 소프트 웨어를 지칭한다.
- 서버는 서버에서 어떤 소프트웨어가 실행되느냐에 따라 나눌 수 있다.
(파일공유 소프트웨어(파일서버), RDB 소프트웨어(DB서버)
- 서버는 이미 만들어진 소프트웨어를 다운받아 구성되거나, 소스코드로 개발된 애플리케이션 서버가 있다.
- 엔터프라이즈 환경에선 다양한 서버가 운영되는데, 운영방식에 따라 베어메탈,하이퍼바이저,컨테이너 형식으로 나눌 수 있다.
> 베어메탈: 일반적으로 컴퓨터를 사서 프로그램을 실행한다. 서버 컴퓨터를 구입하고, 여러개의 소프트웨어를 구동한다.
> 하이퍼바이저: 하나의 컴퓨터의 리소스를 공유하는 가상환경을 만들고 그 위에서 각각의 서버 소프트웨어를 운용한다.
하나의 가상환경은 다른 가상환경과 완벽하게 독립된 형태이다.
> 컨테이너: 독립된 가상환경에서 서버 소프트웨어를 구동한다는 방식은 유사하지만, OS부분에서 하이퍼바이저와 차이가 있다.
2. 가상화 기술이란?
- 가상화 기술이란 실제로 존재하지 않지만, 존재하는 것 처럼 보이게 하는 것이다.
- 대게 IT에서 가상화는 물리적인(CPU,디스크)것을 소프트웨어로 풀어내는 기술을 의미한다.
- 물리적인 컴퓨터 1대에 가상화 기술을 통해 논리적인 컴퓨팅 환경을 조성했다.
- 가상화 기술이 용빼는 재주가 있는게 아니므로, 리소스는 원래 서버의 리소스를 사용해야한다.
- 즉, 진짜 컴퓨터처럼 사용할 수 있는 프로그램을 킨 것이다.
- 가상환경의 장점은 위와 같이 격리된 환경에서 프로세스를 실행할 수 있음에 있다.
- 4개의 가상환경이 협력하여, 특정 애플리케이션을 서비스하고 있다고 가정해자.
- 이때 한 가상환경에서 큰 에러가 발생하더라도, 다른 가상환경에 영향을 주지 않는다.
- 또한, 한 가상환경이 갑자기 트래픽이 몰려, 너무 많은 리소스를 차지하여 문제가 발생하지도 않는다.
이는, 가상환경이 만들어질 때 최대로 사용할 수 있는 리소스가 미리 정해지기 때문이다.
- 하드웨어의 성능이 비약적으로 증가함에 따라, 성능 좋은 서버 컴퓨터를 한 대 사서 위와같은 가상환경을 구성하는게 더 효율적이다!
3. 하이퍼 바이저와 컨테이너
3.1 하이퍼바이저
- 하이퍼 바이저는 가상환경을 조성하기 위해 설치된 프로그램들을 의미한다.
- 가상환경을 조성하면, 원래 물리적 컴퓨터가 가지는 OS는 HOST OS, 가상환경의 OS는 GUEST OS가 된다.
- 하이퍼 바이저를 통한 가상환경은 host os와 다른 os를 사용할 수 있다.
- 사용자의 요청에 따라 CPU나 메모리 등을 사용하기 위해서는 시스템 콜을 통해 OS에 커널을 거쳐 물리적인 장치에 명령을 보내야한다.
- 이때 각 OS마다 사용하는 커널이 다르다. 커널이 다른 OS는 대화가 전혀 불가능한 외국인 3명과 같다.
- 따라서 host os와 guest os는 다를 수 있음으로, 이 둘 사이에서 통역을 해줄 소프트웨어가 필요하고, 이 역할을 하는 것이 하이퍼 바이저이다.
- 즉, 하이퍼 바이저는 다른 커널 간 시스템 콜을 통역하고, 호스트 컴퓨터의 리소스를 할당하여, 격리된 공간에 가상환경을 조성할 수 있도록 한다.
3.2 컨테이너 가상화
- 컨테이너 가상화는 하이퍼 바이저 가상화보다 더 가볍고 빠른 가상환경을 조성하도록 돕는 기술이다.
- 컨테이너 가상화 기술과 하이퍼 바이저의 큰 차이는 host os와 guest os가 다르지 않다는 점이다.
- 모든 컨테이너는 하나의 커널을 공유하기 때문에 서로간 통역의 시간이 필요하지 않다. (오버헤드가 적다)
- 컨테이너 가상화 기술은 리눅스 커널의 자체 격리 기술을 사용한다 (LXC)
-> 커널의 NameSpace와 Cgroups 기술을 사용한다.
Namespaces는 리소스를 나누는 기준 단위를 제공하고, Cgroups는 프로세스가 사용하는 리소스의 사용량을 배분하는 기술이다.
- 위 기술을 통해 각각의 격리된 공간을 만들고 이를 컨테이너라고 부른다.
- 커널 자체 가상화 기술을 사용자가 직접 다루기는 쉽지않다.
- 따라서 도커와 같이 컨테이너 가상화 기술을 쉽게 이용할 수 있도록 돕는 소프트웨어를 사용하여 이용하자
- 도커는 커널 자체 가상화 기술을 활용하도록 돕는 귀염둥이이다. (이런 소프트웨어를 컨테이너 플랫폼이라 부른다)
4. 도커
- 도커는 컨테이너 엔진과, 컨테이너 런타임으로 이루어져있다.
- 컨테이너 엔진은 사용자 요청을 받아서 컨테이너를 관리해주는 역할을 수행한다.
- 컨테이너 런타임은 직접 커널과 통신하면서, 실제 격리된 공간을 만든다. 도커는 RUNC라는 컨테이너 런타임을 사용한다.
*참고 컨테이너 런타임은 OCI에서 규정한 컨테이너 런타임 인테페이스 CRI표준을 구현했다고한다.
컨테이너 기술을 사용할 때 어떤 컨테이너 런타임을 사용할지는 자유라고 한다.
- 도커에도 사용자 명령을 전달하는 클라이언트와 실제로 컨테이너를 관리하는 도커 데몬이라는 서버가 존재한다.
- 클라이언트는 사용자의 명령을 도커 데몬에게 전달한다.
- 도커 데몬은 API를 제공하여, 클라이언트가 컨테이너 기술을 사용하도록 한다.
- 도커 데몬에서 제공하는 API를 하나 하나 찾아서 요청하는 것은 매우 번거로운 일이다.
- 따라서 도커 CLI라는 클라이언트 툴이 제공된다.
참고자료:
'Infra > Docker' 카테고리의 다른 글
Docker (6) - 도커 볼륨 (0) 2024.01.25 Docker (5) - 도커 네트워크 (0) 2024.01.25 Docker (3) - 이미지 빌드 (0) 2024.01.24 Docker(4) - 레지스트리 (0) 2024.01.24 Docker (2) - 이미지와 컨테이너 (0) 2024.01.24