본문 바로가기

Tech story/Container

도커를 공부하는 초보자를 위한 안내서 2편 - 컨테이너의 장점

 

 

 

도커(Docker) 기초 다지기 - 컨테이너(Container)의 장점

지난 포스트에서는 컨테이너가 무엇인지에 대해서 알아보았습니다. 그렇다면, 컨테이너는 왜 쓰는 걸까요?

이번 시간에는 컨테이너의 장점에 대해 알아보는 시간을 갖도록 하겠습니다.
지난 포스트를 아직 읽기 못하신 분은 아래 링크 먼저 보고 오시면 이해가 훨씬 쉬울 것입니다

(https://ktcloudplatform.tistory.com/69 -컨테이너 개념)

 

 

빠른 속도와 효율성

<첨부1 process vs vm 생성속도 비교>

하드웨어 에뮬레이션이 없으므로, 컨테이너는 아주 빠른 속도로 실행됩니다. 기존의 VM과 비교하면 비교도 안 될 만큼 빠른 속도입니다. 컨테이너 생성이라는 것은 OS 입장에서 단순히 프로세스를 시작하는 것과 같습니다. 가상환경이 커널에서 공유되기 때문에 새로운 커널을 시작할 필요도, 하드웨어 초기화 등의 작업도 필요 없습니다. 물론 프로세스를 격리하는 오버헤드가 존재하지만, VM의 하드웨어 에뮬레이트와 비교하였을 때 오버헤드가 거의 존재하지 않는 것과 마찬가지입니다.

 

높은 집적도

<첨부2 vm vs container> 출처 https://www.redhat.com/ko/topics/containers/containers-vs-vms

컨테이너는 커널이 직접 프로세스를 조작하여 공간을 분리하기 때문에 OS는 하나만 존재합니다. 그렇기에 여러 개의 컨테이너를 만들어 실행하여도 하나의 OS 위에서 돌아가기 때문에 VM에 비해 고밀도가 가능합니다. , 하나의 머신에서 프로세스를 실행하듯 많이 실행하는 것이 가능하다는 의미입니다.

 

 

높은 이식성

<첨부3 높은 이식성>

모든 컨테이너는 호스트의 환경이 아닌 독자적인 실행환경을 가지고 있습니다. 이 환경은 파일들로 구성되며, 이미지 형식으로 공유될 수 있습니다. 리눅스 커널을 사용하고 같은 컨테이너 런타임을 사용할 경우 컨테이너 실행 환경을 쉽게 공유하고 재현할 수 있습니다.

물론, 컨테이너가 가진 이식성에도 한계가 존재합니다. 자세한 내용은 아래 링크를 통해 확인해 주시길 바랍니다.

 

애플리케이션 컨테이너 지원

<첨부 4 application container 출처: https://developer.hpe.com/blog/kubernetes-application-containers-managing-containers-and-cluster-resour/>

컨테이너의 종류에는 크게 시스템 컨테이너(System Container)와 애플리케이션 컨테이너(Application Container)로 나뉩니다.

시스템 컨테이너는 컨테이너 기술들을 사용해 운영체제 위에 하드웨어 가상화 없이 운영체제를 실행합니다. 일반적인 리눅스(Linux)처럼 init 프로세스 등을 사용해 다수 프로세스가 같은 환경을 공유하는 것을 목표로 합니다. 시스템 컨테이너를 지향하는 런타임으로는 LXC와 LXD가 있습니다.

애플리케이션 컨테이너는 컨테이너 기술을 활용해 하나의 애플리케이션(프로세스)을 실행하는 것을 목표로 합니다. 독립적인 환경을 가진다는 점에서 시스템 컨테이너와 개념은 같습니다. 하지만 단 하나의 프로세스만 실행한다는 점에서 확장이 쉽고 관리가 용이합니다. 대표적인 애플리케이션 컨테이너 런타임으로는 바로 '도커(Docker)'가 있습니다. 헷갈리시나요? 쉽게 생각하면, 컨테이너의 목표가 OS냐 애플리케이션이냐 차이일 뿐입니다.

이 애플리케이션 컨테이너를 지원한다는 것은 엄청난 장점이 있습니다.

첫 번째로, 목적에 맞는 프로세스만 존재하는 환경을 간편하게 만들 수 있습니다. 웹 서버용 컨테이너라면 Apache Httpd 프로세스만 존재하는 컨테이너를 실행할 수 있는 것입니다.

두 번째로, 서버 운영 면에서의 장점을 가집니다. 애플리케이션 컨테이너는 서버 애플리케이션의 배포 단위를 새로 정의했고, 기존 IT 인프라는 물론 클라우드(Cloud)에도 큰 변화를 가져왔습니다. 기존 서버 운영 방식에서는 애플리케이션 실행을 위해 서버 컴퓨터의 상태를 지속해서 관리해야 했지만, 컨테이너 사용을 통해 애플리케이션별로 독립적인 환경을 구축하고 관리하는 것이 가능해졌기 때문에 서버 환경의 관리가 용이해 졌습니다.

 

 

마무리

지금까지 컨테이너가 가진 장점에 대해 알아보았습니다. 잘 이해가 되셨나요? 이해가 가지 않는 부분은 댓글로 남겨주시면 친절하게 답변 드리겠습니다. 

오늘 말씀드린 내용을 정리하자면, 컨테이너는 아래와 같은 장점을 가집니다.

  • 빠른 속도와 효율성
  • 높은 집적도
  • 낮은 오버헤드
  • 높은 이식성
  • 애플리케이션 컨테이너 지원

위의 장점들을 바탕으로 컨테이너는 대세(혹은 새로운 표준) 기술이 될 수 있었습니다. 다음 시간에는 이 컨테이너를 활용하여 현재 가장 잘 나가는 컨테이너 런타임인 도커에 대해 본격적으로 공부해 보겠습니다.

 

 

관련글