Kwon's Study Blog !
[Docker] 도커와 기존의 가상화 기술과의 차이를 알아보자 본문
현재 글은
https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EB%8F%84%EC%BB%A4-ci/dashboard
을 수강하며 정리한 내용입니다.
문제시 비공개로 처리 하도록 하겠습니다.
도커와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해
가상화 기술이 나오기 전과 하이퍼 바이저 기반의 가상화 출현
- 가상화 기술 나오기 전
- 한대의 서버를 하나의 용도로만 사용
- 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영
-> 남는 서버 공간이 그대로 방치되며 ...
-> 안정적이지만 비효율적입니다.
- 하이퍼 바이저 기반의 가상화 기술의 출현
- 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능
- 하이퍼 바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어
- 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자
- 네이티브 하이퍼 바이저
하이퍼 바이저가 하드웨어를 직접 제어하기에 자원을 효율적으로 사용 가능합니다.
별도의 호스트 OS가 없으므로 오버헤드가 적다.
하지만 여러 하드웨어 드라이브를 세팅해야 하므로 설치가 어렵습니다.
- 호스트형 하이퍼 바이저
일반적으로 많이 이용하는 방법.!
일반적인 소프트웨어처럼 호스트 OS 위에서 실행되며 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식으로 오버헤드가 큽니다.
하지만 게스트 OS 종류에 대한 제약이 없고 구현이 다소 쉽습니다.
위의 사진을 보면
하이퍼 바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당 받습니다.
-> 논리적으로 분리 돼있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.
결국 이 하이퍼 바이저 가상화 기술을 토대로 Docker도 등장하게 됐습니다.
도커와 기존 하이퍼 바이저 가상화 기술(VM)
VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍습니다.
애플리케이션을 실행할 때
컨테이너 방식에선 호스트 OS위에 애플리케이션의 실행 패키지인 이미지를 배포하기만 하면 되는데,
VM은 애플리케이션을 실행 하기 위해서 VM을 띄우고 자원을 할당한 다음 게스트 OS를 부팅하여 애플리케이션을 실행 해야 되서 훨씬 복잡하고 무겁게 실행을 해야 합니다.
공통점
도커 컨테이너와 가상 머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법입니다.
차이점
가장 큰 차이점은 격리된 환경을 얼마나 격리 시키는지의 차이 입니다.
도커 컨테이너
도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유합니다. (하나의 OS에 이미지를 다운받아 사용하기 때문에)
결과적으로 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있습니다. (권한이 있다면)
VM
VM 내부에서 실행되는 모든 것은 호스트 운영 체제 또는 하이퍼바이저와 독립되어 있습니다.
가상 머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해 프로세스를 시작하고, 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당합니다.
그러나 VM과 근본적으로 다른 것은 시작 시간에 이 VM환경을 위해 새롭고, 이 특정 VM만을 위한 커널을 부팅하고 운영체제 프로세스 세트를 시작한 다는 것입니다.
결국 이것은 응용 프로그램만 포함하는 일반적인 컨테이너보다 VM의 크기를 훨씬 크게 만듭니다.
오버헤드가 커서 굉장히 느리지만 비교적 사용방법은 간단합니다.
도커 컨테이너 예시
앞서 설명했다시피 컨테이너는 커널은 공유하고 나머지 CPU, 메모리, 하드 디스크는 컨테이너에 격리 돼있습니다.
어떻게 도커 컨테이너를 격리 시킬까?
먼저 리눅스에서 쓰이는 Cgroup(control groups) 과 네임스페이스(name spaces)에 대해서 알아야 합니다.
Cgroup과 네임스페이스는 컨테이너와 호스트에서 실행되는
다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들을 말합니다.
- Cgroup
CPU, 메모리, Network Bandwith, HD i/o 등 프로세스 그룹의 시스템 리소스 사용양을 관리.
-> 어떤 애플리케이션의 사용량이 너무 많다면 그 애플리케이션 같은 것을 Cgroup에 집어 넣어
CPU와 메모리 등 사용 제한 가능(필요한 만큼만 할당해줌.)
- 네임스페이스
하나의 시스템에서 프로세스를 격리 시킬 수 있는 가상화 기술.
별개의 독립된 공간을 사용하는 것 처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술.
Cgroup, 네임스페이스 를 도커 환경에서 사용할 수 있는 이유
Cgroup과 네임스페이스는 linux 환경에서 사용되는 것인데 현재 저의 OS는 window를 사용하고 있습니다.
그런데 어떻게 사용할 수 있을까요??
docker version
위와 같은 명령어를 입력하면
제 OS는 window인데 위 그림에서 OS는 linux로 나오는 것을 볼 수 있습니다.
이는 사실 내부적으로 이렇습니다.
도커 클라이언트와 도커 서버 환경은 결국 linux환경에서 실행되는 것을 알 수 있습니다.
'Docker' 카테고리의 다른 글
[Docker] 도커를 이용한 간단한 Node.js 어플 만들기 (0) | 2022.03.25 |
---|---|
[Docker] 직접 도커 이미지 만들어 보기 (0) | 2022.03.24 |
[Docker] 기본적인 Docker Client 명령어 알아보기 (0) | 2022.03.24 |
[Docker] 이미지로 컨테이너 만들기 (0) | 2022.03.23 |
[Docker] 도커를 사용하는 이유와 도커란 무엇인가 ? (0) | 2022.03.22 |