지난 시간에는 도커(Docker)와 컨테이너(Container)를 알아보며, 규격화된 컨테이너를 통해 컴퓨팅 자원을 더 편리하게 이동하고 분배, 복사, 관리까지 할 수 있다는 사실을 알게 되었습니다.
이렇게 편리한 ‘도커(Docker)’가 있기 이전부터도 기존에 가상화 기술은 존재했다고 하는데요. VM(Virtual Machine)이라고 불리는 기존가상화 기술과 컨테이너 기술을 비교해 본다면 ‘도커(Docker)’의 원리를 조금 더 잘 이해할 수 있을 것으로 보입니다. 오늘은 가상머신(VM)과 컨테이너(Container)비교를 통해 진화된 가상화 기술에 알아봅시다!
🔎도커·컨테이너 개념 정리하기👉: https://blog.naver.com/xiilab/223456181235
기존 가상화 VM과 하이퍼바이저
가상화 기술이란 실제 하드웨어 자원을 여러 개의 가상 리소스를 통해, 독립적인 시스템처럼 사용하는 것입니다. 쉽게 말해서, 실제 하나의 GPU를 가상의 공간에서 여러명이 쓸 수 있게 하기 위한 기술을 말합니다. 기존 가상화라고 불리던 VM을 통해서는 실제 하드웨어 자원을 가상 환경으로 구분 지어 각 프로세스에 할당할 수 있습니다.
VM을 설명하기 앞서, 지금의 도커가 있기 전 가상화 이전의 시대에서는 1Server = 1Application으로, 하나의 서버에 하나의 어플리케이션만 구동 가능했습니다.
결국 하나의 서버 위에 하나의 OS와 프로그램만을 운영하기 때문에 안정적이지만, 남는 서버 자원을 그대로 방치시키기 때문에 비효율적이라고 평가받았습니다.
이런 비효율성을 극복하기 위해 등장한 기술이 ‘가상화’ 입니다. 그 중 ‘하이퍼바이저’ 기반의 가상화가 가장 많이 이용되었는데요. 하이퍼바이저는 논리적으로 분할된 공간에서 VM(Virtual Machine)이라는 독립된 가상환경을 만들고, Host OS에서 VM에 설치된 Guest OS를 구동 및 모니터링 하는 역할을 합니다.
첨부된 이미지로 이해하자면, 하이퍼바이저 위에 묶음 표시되어 있는 것이 'VM' 가상 머신 입니다. 기존에 설치된 운영체제 Host OS 위에 PC에 추가 설치될 Guset OS를 쌓아 어플리케이션을 실행시키는 것입니다.
‘하이퍼바이저’를 통해 가상화를 적용하면 물리적인 서버에서 하나 혹은 그 이상의 독립적인 운영체제가 돌아갈 수 있는데요. 즉, 물리적인 서버의 OS 위에 여러 다른 독립적인 OS들이 가상으로 돌아가는 구조입니다. 이렇게 되면, 서버에서 하나의 OS만 돌아갈 때보다 물리적 자원을 더 효율적으로 사용할 수 있습니다.
* 하이퍼바이저: VM을 생성·구동하는 소프트웨어. 가상 머신 모니터라고도 불리며, OS와 VM의 리소스를 분리하여, VM의 생성과 관리를 지원
기존 가상화 VM을 컨테이너화
하이퍼바이저 가상화는 물리적 서버 리소스를 독립적인 OS로 운영 한다는 점에서 효율적이라고 할 수 있지만, 한 편으로는 무거운 기술이라고 표현되기도 하는데요. 독립적인 OS를 실행시키는 것이기 때문에 부팅 시간이 길고, 리소스 역시 많은 공간을 차지할 수 밖에 없습니다. 이러한 점으로 인해 하이퍼바이저 가상화에서 점차 컨테이너 가상화로 진화되었습니다.
컨테이너 가상화 기술은 OS 커널위의 유저 공간에서 실행됩니다. 즉 운영 체제를 완전히 독립적으로 가상화하는 것이 아닌, 독립적인 유저 공간을 가상화하게 됩니다. 그렇기 때문에, 하나의 호스트 서버에서 여러 독립적인 유저 스페이스 인스턴스들을 가상적으로 실행할 수 있게 되는 것입니다.
*커널: 운영 체제의 기능 가운데 운영 체제를 구성하는 프로세서와 운영 체제의 제어
컨테이너 가상화는 하이퍼바이저 가상화 보다 훨씬 가볍기 때문에 빠르고 쉽게 독립적인 가상 환경을 실행시킬 수 있습니다. 도커 이미지만 있으면 어디서든 쉽고 빠르게 테스트 환경, 샌드박스 환경 및 프로덕션 배포를 할 수 있어, 최근에는 대부분 컨테이너 가상화를 통해 도커를 실행합니다.
VM과 컨테이너의 핵심 차이점
두 가상화의 차이점은 바로 게스트 OS의 유무라고 할 수 있습니다. VM에는 Guest OS(윈도우, 리눅스 등)가 설치되는데요. 프로그램의 동시 설치나 실행을 위해서는 독립적인 OS 환경이 필요하기 때문이죠.
반면, Docker의 컨테이너에서는 Host OS의 커널을 공유하게 됩니다. 커널이란 하드웨어 자원을 관리하고 하드웨어 프로세스 사이의 인터페이스 역할을 수행하는 OS의 핵심 구성 요소 중 하나입니다. 커널을 컴퓨팅 자원에 가상화하고 이를 프로세스에 할당하게 되는 것입니다.
도커·컨테이너에서는 Host OS위에 어플리케이션의 실행 패키지인 ‘이미지’를 배포만 하면 되는데, VM은 하나의 어플리케이션을 실행하기 위해 VM을 띄우고 자원을 할당하고 게스트 OS를 부팅한 뒤에야 비로서 애플리케이션을 실행하게 되는 것입니다.
결론적으로 컨테이너에는 게스트 OS가 필요가 없어, 높은 효율로의 자원 관리가 가능합니다.
|
전통적인 배포
|
VM 기반 배포
|
컨테이너 기반 배포
|
컴퓨터
|
물리적인 컴퓨터 1대
|
물리적 컴퓨터 1대에 다수의
가상 머신(가상 환경) 존재 |
컴퓨터 형태에 영향 받지 않음
|
OS
|
물리적인 컴퓨터 1대
+OS 1개가 설치됨 |
물리적인 컴퓨터 OS 1대+
다수의 가상머신에 각각 OS 설치 |
컴퓨터 형태와 관련 없이
설치된 OS 1개 |
리소스
|
컴퓨터 1대의 자원을
여러 프로그램이 나눠씀 |
하이퍼바이저를 통해
가상머신별 개별적 자원 할당 |
OS에서 프로그램별로 자원을
할당하고 관리함 |
격리 수준
|
격리되지 않아 프로그램 간 간섭 발생
|
각 가상머신이
완전하게 격리됨 |
프로그램 실행 환경은 격리되지만 OS 환경은 공유됨
|
오류 전이 발생
|
특정 프로그램의
문제가 시스템 전체의 중단을 가져올 수 있음 |
특정 가상머신의 문제가 다른
가상머신의 문제로 전이될 가능성이 낮음 |
특정 프로그램의 문제가 다른 프로그램에 간섭을
일으키지는 않지만, 특정 프로그램의 문제가 OS 문제를 유발할 경우 시스템 중단 가능성 있음 |
위의 표를 통해서, 각 가상화의 변화와 배포 특징을 비교해볼 수 있는데요. 가상 머신(VM)은 말 그대로 가상 컴퓨터입니다. 하나의 컴퓨터 자원에서 쪼개진 두 개 이상의 가상화 컴퓨터이기 때문에, 각각의 OS 환경에 서로 다른 프로그램을 설치해서 구동시킬 수 있습니다.
하나의 컴퓨터에서 두 개의 가상 환경이 돌아가기 때문에 간섭 현상이 일어나지 않지만, 많은 리소스를 차지 한다는 점에서 효율적인 자원 관리를 기대하기는 어렵습니다.
반면, 컨테이너는 하나의 컴퓨터와 OS 상에서 두 가지 프로그램을 구동시킬 수 있는데요. 하나의 컴퓨터에서 조각 단위로 나눠진 컨테이너를 통해 각각의 프로그램을 실행합니다. 이 때 분리된 컨테이너 마다 하고자 하는 작업이 분명하기 때문에, 사용자는 특정 작업을 진행할 때 더 많은 가용 자원을 할당하고, 배치할 수 있습니다.
아스트라고 컨테이너 가상화를 통한 개발 작업
위에서 살펴본 내용과 같이 기존 가상화에서 도커 컨테이너 방식으로 진화되며, 개발자 및 사용자들은 최신 어플리케이션을 빌드하고 배포하기에 용이해졌습니다.
이처럼 컨테이너 가상화를 통해서는 개발자가 원하는 환경을 바로바로 만들어 진행할 수 있고, 다른 컴퓨터에 컨테이너만 이동하면 이전에 사용하던 작업 환경을 바로 실행가능하다는 편리함이 있습니다.
아스트라고 역시, 이러한 컨테이너 기술 기반을 통해 더 빠르고 편리한 워크로드를 구축해나갈 수 있습니다.
사용자는 아스트라고 내 ‘빌트인 이미지’ 기능을 통해 특정 모델에 대해 최적화된 프레임워크 라이브러리를 컨테이너 이미지로 제공하게 되는데요.
프레임워크와 라이브러리는 사용자의 개발 워크로드 및 환경에 따라 맞춤형 이미지 버전을 선택할 수 있도록 폭 넓은 옵션을 제공합니다.(PyTorch, TensorFlow, Keras 등) 컨테이너 이미지를 지속적으로 복제·배포 등 편리하게 활용가능하니, 언제든 다른 컴퓨터에서도 기존 작업 환경을 구축하고 유지 가능합니다.
아스트라고의 ‘빌트인 이미지’ 기능에서 최적화된 인프라 환경을 제공해주고, 작업 환경을 만들어주니, 사용자들은 진행하는 개발과 연구에만 더욱 집중할 수 있습니다. 사용자 효율성과 편리함에 초점을 둔 아스트라고 솔루션을 통해 질 높은 개발 환경을 구축해보시길 바랍니다!
'AstraGo' 카테고리의 다른 글
작업 스케줄러(job Scheduler)로 알아보는 Kubernetes의 빈패킹(Bin packing) (0) | 2024.06.30 |
---|---|
컨테이너를 쉽게 다루는 쿠버네티스(kubernetes,k8s) 정의와 장점 (0) | 2024.06.29 |
한정된 자원을 유동적으로 사용할 수 있는 '도커'와 '컨테이너' (0) | 2024.06.29 |
AI 개발에 파이썬을 주로 활용한다면, ‘주피터 노트북’(Jupyter Notebook) (0) | 2024.06.29 |
머신러닝·딥러닝의 대표적 프레임워크 텐서플로우vs파이토치 (7) | 2024.06.28 |