Outdated/Infrastructure

[Infra] 컨테이너(Container)

해달 2019. 7. 2. 09:00

관련된 글

2019/07/01 - [Computer/Infrastructure] - [Infra] 가상화(Virtualization)


목차

  1. 컨테이너(Container)란?

  2. 컨테이너와 가상 머신의 비교

  3. 컨테이너의 장점과 단점

  4. 참고자료


1. 컨테이너(Container)란?

 컨테이너란 가상화의 한 종류(애플리케이션 가상화)로 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공하는 기술이다. 다시 말해, 코드와 그것의 모든 의존성을 패키징하는 기술이다. 이렇게 패키징한 것을 이미지(image)라고 부른다.


 컨테이너와 가상 머신은 매우 비슷해보인다. 컨테이너도 가상 머신과 비슷하게 소프트웨어 서비스 구동을 위한 격리 환경을 만들어 개발 단계에서 테스트, 프로덕션에 이르기까지 이식성과 일관성을 유지하고, 이를 통해 애플리케이션을 쉽게 지속적으로 배포할 수 있기  때문이다. 그렇다면 가상 머신과 컨테이너는 어떤 차이가 있는 것일까? 비교해보자.

2. 컨테이너와 가상 머신의 비교

 

 우선 가상 머신은 물리적인 하드웨어를 가상화하여 단일 머신에서 여러 환경을 구축하기 위한 것이다. 이것이 구동되기 위해서는 하이퍼바이저라는 것이 필요하며, 하이퍼바이저를 통해 여러 가상 머신들이 단일 머신에서 실행된다. 각각의 가상 머신은 OS, 애플리케이션, 필요한 바이너리와 라이브러리의 전체 복사본을 포함해 수십 GB의 용량을 가지게 된다. 위의 그림과 같이 앱이 실행되기까지 거쳐야할 계층이 다소 많아 오버헤드가 있는 편이다.


 컨테이너는 이와 다르게 운영체제 수준에서 가상화를 실시해 호스트 OS 커널에서 직접 구동된다. 여러 컨테이너가 동일한 기계에서 실행될 수 있고, 각 컨테이너는 사용자 공간에서 분리된 프로세스로 실행된다. 컨테이너 이미지는 일반적으로 수십 MB로 가상 머신보다 공간을 적게 차지한다. 또한, 오버헤드가 낮아 처리 속도가 거의 네이티브에 가깝다. 하지만, 호스트 OS 커널을 공유하기에 각 컨테이너들은 기본 시스템과 호환되어야 한다는 차이점이 있다. 표로 정리하면 다음과 같다.




컨테이너

가상 머신

가상화 수준

운영체제

하드웨어

구동 방법

호스트 OS 커널

하이퍼바이저

디스크 용량

낮음(수십 MB)

높음(수십 GB)

오버헤드

낮음

대체적으로 높음

일관성 있는 런타임 환경

O

O

애플리케이션 격리

O

O

시스템 종속

O

X


3. 컨테이너의 장점과 단점

 컨테이너는 가상 머신과 비슷한 면이 많다는 것을 앞서 살펴보았다. 당연히 컨테이너도 가상 머신처럼 논리적으로 격리되고, 일관성 있는 환경을 제공하기 때문에 개발 생산성 향상에 도움을 준다. 그럼 컨테이너만의 장점과 단점은 무엇일까? 먼저 장점은 다음과 같다.


  • 빠른 시작과 종료 속도

    • 가상 머신과 달리 새로운 커널을 시작할 필요가 없고, 하드웨어 초기화 등의 작업도 필요 없기 때문이다.

    • OS에서 보면 새로운 프로세스를 시작하는 것과 다름 없다.

  • 높은 집적도

    • 이 역시 OS 수준에서 가상화가 이뤄지기 때문이다.

  • 낮은 오버헤드

  • 낮은 디스크 용량

    • 가상 머신과 달리 컨테이너는 목적에 맞는 프로세스만 존재하는 환경을 만들 수 있다. 그렇기 때문에 매우 가볍다.


단점은 컨테이너가 갖고 있는 구조적인 한계에서 오는 것이다.


  • 호스트 OS에 종속적

  • 컨테이너별 커널 구성이 불가능


4. 참고자료


'Outdated > Infrastructure' 카테고리의 다른 글

[Infra] 가상화(Virtualization)  (0) 2019.07.01