[Container] 컨테이너란?

2019. 11. 13. 17:34Engineering/Container&Kubernetes

Contents

1. VM vs. Container

2. VM Image vs. Container Layered Image

3. Container 장점


 

 

Container 기술이 무엇인지, VM과  비교를 통해 알아보고 Container가 갖는 장점에 대해 이야기 합니다.


1. VM vs. Container

많은 글들에서 VM Container 차이를 다루고 있습니다.

또한 많은 글들 하나이며, 최대한 쉽게 VM Container 차이를 설명하고자 합니다.

 

VM Container 근본적인 차이점은 가상화를 수행하는 수준 입니다.

근본적인 차이에서부터 VM Container 종속적(?) 차이점들이 생겨 납니다.

 

먼저 VM 하드웨어(또는 인프라) 수준에서 가상화가 이루어집니다.

한개의 하드웨어(CPU, RAM) 자체를 복수개의 자원인양 격리하는 것이 가상화입니다.

이러한 VM 위한 하드웨어 가상화는 Hypervisor라는 녀석이 수행합니다.

 

 

 

Hypervisor 제공하는 하드웨어 가상화를 통해 복수의 사용자가 하드웨어 자원을 할당 받았다고 합시다.

그렇다면, 각각의 사용자는 하드웨어를 구동할 OS 필요하게 됩니다.

따라서 VM 경우는 사용자마다 할당 받은 하드웨어 자원 위에 서로 다른 Guest OS 실행 합니다.

 

따라서 VM Guest OS Host OS 분리 되며,

Guest VM Guest OS 올라가게 됩니다.

 

Guest OS Host OS 서로 다르기 때문에,

I/O device 접근하는 경우 Guest OS kernel 시스템콜 -> Host OS kernel 시스템콜 변환이 필요합니다.

여러 VM 동일 I/O device 접근하는 경우에는 이러한 kernel 변환 작업에 병목이 생긴다는 문제가 있습니다.

 

 

 

반면 Container Host OS 수준에서 가상화가 이루어집니다.

OS 제공하는 사용자 격리 도구들 (namespace, cgroup ) 활용하여 Container들을 격리 합니다.

 

 

 

쉽게 말하면 Container 결국 프로세스 입니다.

 

따라서 Container들은 Host OS 공유하며,

Host OS 중개를 통해 하드웨어 자원에 접근합니다.

Host OS라는 하드웨어를 구동시킬 OS 이미 존재하므로,

Container 자체에는 guest OS 필요 없습니다.

 

Guest OS 없으니, kernel 변환 작업도 필요 없습니다.

따라서 I/O device 접근이 VM 비해 빠릅니다.

 

 

2. VM Image vs. Container Image

Image 어떤 시스템의 상태를 사진으로 찍듯이 저장해둔 파일을 의미합니다.

VM Image 이러한 '사진찍기' 의미에 그대로 대응합니다.

 

VM Guest OS 부터 위에 올라간 파일들을 그대로 찍어내어 Image 생성합니다.

따라서 동일한 파일들을 일부 포함하고 있는 VM 간에도 완전히 새로운 Image 새로 생성 합니다.

 

나은 이해를 위해 Container Image 비교해봅시다.

Container Image Layer 이루고 있습니다.

(Union File System이라는 것을 기반으로 Layered 구조를 취합니다.)

'Layer',
, Image 통째로 관리 하는 것이 아니라, 계층을 나누어 관리 합니다.

아래와 같은 예시 그림을 봅시다.

 

 

Image#1 bootfs 위에 ubuntu, centOS 같은 OS 포함한 base image 계층으로 구성된 이미지 입니다.

Image#1 위에 어떤 사용자가 App1, App2 설치했다고 합시다.

그러면 Image#2 Image#1 바탕으로, 새로 추가된 App1, App2 계층만을 본래 Image#1 파일에 merge 합니다.

 

다음으로 동일한 사용자가 Imgae#2 사용하다가, App1 업데이트 하여 App1' 이라는 녀석으로 교체한 상황을 가정합시다.

그러면 수정된 App1' 부분만을 Image#2 merge하여 Image#3 생성할 있습니다.

이와 같이 Container 제공하는 Layered Image

변경된 계층만을 업로드/다운로드 하여, 이미지 배포/통합 시간을 단축시킵니다.
 

 

 

3. Container 장점

내용들을 바탕으로 Container 장점을 정리해 봅시다.

 

 

번째, 빠르고 쉬운 배포가 가능합니다.

Layered 구조를 갖는 Container 이미지의 구조 덕분에,

새로 업데이트 이미지를 빠르게 다운 받을 있습니다.

(앞서 말했듯, 변경된 layer 부분만 다운로드 하기 때문입니다.)

 

이와 더불어 guest OS 포함하지 않아 Container up-time 굉장히 빠릅니다.

VM 분에 걸쳐 up 되는데 반해 Container 만에 up 됩니다.

따라서 업데이트된 버전의 이미지를 빠르게 받아오고, 빠르게 실행할 있습니다.

 

뿐만 아니라 Kubernetes OpenShift 같은 Container Orchestration 도구들과 함께 사용한다면, 이러한 배포과정을 자동화할 있습니다.

 

번째, 훌륭한 이식성을 제공합니다.

Container OS 수준에서의 가상화 이기 때문에,

OS 수준을 가상화하는 Container 런타임만 있으면 Container 사용이 가능합니다.

따라서 host 환경이 VM이던, baremetal이던, 또는 Window Linux, Container 런타임만 설치된 환경이라면 어디에나 Container 구동할 있습니다.

 

마지막 번째, 운영 비용을 절감할 있습니다.

VM 비하여 Container 하나의 host 많은 격리 환경을 제공할 있습니다.

따라서 하나의 host 많은 사용자들에게 제공할 있으므로,

운영자의 관점에서 인프라 비용을 절약 있습니다.

 

또한, Container 경우는 guest OS 올라가지 않기 때문에

보통 OS 라이센스 구입 비용 또한 절약 있습니다.

 

위에서 Orchestrator 사용하면 배포 자동화를 구성할 있다고 말씀드렸습니다.

Orchestrator 배포 자동화 뿐만 아니라 관리 자동화까지도 지원합니다.

Orchestrator 관리 자동화 기능을 사용하면 운영에 드는 시간적 비용을 절감할 있습니다.