-
[Docker] Docker와 기존 가상화 기술의 차이 알아보기DevOps/Docker 2021. 3. 29. 14:29728x90반응형
Docker와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해하기
-
가상화 기술 나오기 전
- 한대의 서버를 하나의 용도로만 사용
- 남는 서버 공간 그대로 방치
- 하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영
- 안정적일 수 있지만 비효율적
-
하이퍼 바이저 기반의 가상화 등장
- 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능
하이퍼 바이저
는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있는 소프트웨어- 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자
현재 많이 사용하는
VM
의 구조는 위와 같습니다. 기존 OS 위에서하이퍼 바이저
를 사용하는 방식입니다. (윈도우 PC에서 VMware 설치한 후에 거기에 ubuntu OS를 설치한다면 위와 같은 구조라고 생각하면 될 거 같습니다.)다른 그림으로 표현하면 위와 같이 표현할 수 있습니다.
하이퍼바이저
아래에 기존 OS가 존재하고 그 위에Guest OS
가 존재하는 것을 볼 수 있습니다.하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받습니다.논리적으로 분리 되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.
Docker는 하루 아침에 갑자기 나온 것이 아니라 이러한 기술들을 토대로 나온 것입니다.
가상화 기술에서 나온 컨테이너 가상화 기술
둘의 구조가 많이 비슷한 것을 볼 수 있습니다. 하지만
도커
는하이퍼바이저
와Guest OS
가 필요하지 않으므로 더 가볍습니다.(OS 자체는 많이 무거움)즉, 정리하면 아래와 같습니다.
Docker
: 어플리케이션을 실행할 때는 컨테이너 방식에서는 Host OS 위에 애플리케이션의 실행 패키지인 이미지를 배포하기만 하면 됩니다.VM
: VM은 어플리케이션을 실행 하기 위해서 VM을 띄우고 자원을 할당한 다음, 게스트 OS를 부팅하여 어플리케이션을 실행 해야 해서 훨씬 무겁고 복잡하게 실행해야 합니다.공통점
: 도커 컨테이너와 가장 머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법입니다.차이점
: 가장 큰 차이점은 격리된 환경을 얼마나 격리를 시키는지의 차이
Docker 컨테이너
도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다. (하나의 OS에 이미지를 다운 받아 사용하기 때문에) 결과적으로 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있다. (Docker ps 명령어로 프로세스 확인 가능)
가상머신
가상머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영체제 또는 하이퍼바이저와 독립되어 있다. 가상 머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해 프로세스를 시작하고, 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당한다. 또한 시작 시간에 VM 환경을 위해 새롭고 이 특정 VM만을 위한 커널을 부팅하고 운영체제 프로세스 세트를 시작한다는 것이다. (오버헤드가 커서 굉장히 느리다.) 비교적 사용방법은 간단하다는 장점이 있다.
Docker 컨테이너의 예시
위와 같이
컨테이너
는커널은 공유하고
나머지 CPU, 메모리, 하드디스크는 컨테이너 안에 다 격리되어 있습니다.컨테이너들을 격리시키는데 어떻게 해서 격리시킬 수 있을까요?
먼저 리눅스에서 쓰이는
CGroup
과네임스페이스(namespaces)
에 대해서 알아야 합니다. 이것들은컨테이너와 호스트에서 실행되는 프로세스 사이에 벽을 만드는 리눅스 커널 기능
들입니다.C Group
: CPU, 메모리, Network, HD I/O 등 프로세스 그룹의 시스템 리소스 사용량을 관리- 어떤 애플리케이션 사용량이 너무 많다면 그 어플리케이션 같은 것을 C Group에 집어 넣어서 CPU와 메모리 사용 제한 가능 (필요한 만큼만 할당해줌)
네임스페이스
: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술(별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술)
이러한 Docker 컨테이너 기술들이 갑자기 나온 것이 아니라
VM
과Linux
기반의 기술들을 사용해서 나온 것입니다.Docker 환경에서 C-Group, 네임스페이스를 사용할 수 있는 이유
C-Group
과네임스페이스
는Linux
환경에서 사용되는 것인데 현재 저는MacOS
를 사용하고 있습니다. 그런데 어떻게 사용할 수 있을까요?위와 같이
docker version
을 보면linux
인 것을 볼 수 있습니다.실제로 좀 더 그림을 구체화 시켜보면 위와 같이 되어 있습니다. 즉,
Docker 클라이언트
와Docker 서버
는linux
로 되어 있습니다.반응형'DevOps > Docker' 카테고리의 다른 글
[Docker] EC2에서 Docker 컨테이너를 활용하여 웹 서버 실행하기 (0) 2021.03.29 [Docker] Docker Image로 Container를 만드는 과정 (0) 2021.03.29 [Docker] Docker 간단한 명령어로 실습해보기 (0) 2021.03.29 [Docker] Docker Image를 직접 만들어 보기 (1) 2021.03.29 [Docker] Docker란 무엇이고 왜 사용할까? (0) 2021.03.29 -