이번 포스팅에서는 컨테이너, 도커 컨테이너, 도커 이미지에 대해서 알아보겠습니다. 

 

1. 컨테이너는 무엇이고, 도커는 무엇인가? (What is a Container and Docker?)

2. 왜 도커인가 (Why Docker?)

3. 도커 컨테이너 vs. 도커 이미지 (Docker Container vs. Docker Image)

 

 

1. 컨테이너는 무엇이고, 도커는 무엇인가? (What is a Container and Docker?)


컨테이너(Container)는 애플리케이션이 컴퓨팅 환경 간에 신속하고 신뢰성 있게 실행될 수 있도록 코드와 그 모든 종속성 있는 것들을 패키징하는 소프트웨어의 표준 단위입니다.도커 컨테이너 이미지(Docker container)는 어플리케이션 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정)을 포함 가볍고 스탠드얼론의 실행 가능한 소프트웨어 패키지입니다.

 

Docker (www.docker.com)



컨테이너 이미지는 실행 시 컨테이너가 되며, 도커 컨테이너의 경우 이미지가 도커 엔진에서 실행되면 컨테이너가 됩니다. 컨테이너형 소프트웨어는 Linux 기반 애플리케이션과 Windows 기반 애플리케이션 모두에서 사용할 수 있으며, 인프라스트럭처에 관계없이 항상 동일하게 실행됩니다. 컨테이너는 소프트웨어를 환경에서 격리하고 개발 및 스테이징 간의 차이에도 불구하고 균등하게 작동하도록 보장합니다.

도커 컨테이너 기술은 2013년 오픈 소스 도커 엔진으로 출시되었습니다. 도커 컨테이너는 Linux, Windows, 데이터센터, 클라우드, 서버리스 등 어디에서나 사용할 수 있습니다.[1] 

 

Docker is Everywhere (www.docker.com)

 

 


2. 왜 도커 인가? (Why Docker?)

 

오늘날 앱을 개발하려면 코드 작성 이상의 것이 필요합니다. 라이프 사이클 단계별로 여러 언어, 프레임워크, 아키텍처 및 도구 간의 불연속적인 인터페이스로 인해 엄청난 복잡성이 발생합니다. Docker는 워크플로우를 단순화하고 가속화하는 동시에 개발자가 각 프로젝트에 사용할 툴, 애플리케이션 스택 및 구현 환경을 자유롭게 선택할 수 있도록 지원합니다.

도커 컨테이너(Docker Container)와 가상 머신(Virtual Machine)은 리소스 분리 및 할당에 유사한 이점이 있지만, 도커 컨테이너는 하드웨어 대신 운영 체제(Operating System)를 가상화하기 때문에 다르게 작동합니다. 도커 컨테이너가 가상머신보다 휴대성과 효율이 뛰어납니다. [1]

 

Docker vs. Virtual Machine (www.docker.com)


기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었습니다. 이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상 머신에는 우분투, CentOS 등의 운영체제가 설치되어 사용됩니다. 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제(Guest OS)라고 하며, 각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받아 사용합니다. 이러한 가상화 방식을 사용할 수 있는 대표적인 가상화 툴로 VirtualBox, VMware 등이 있습니다. 

그러나 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거쳐기 때문에 일반 호스트에 비해 성능의 손실이 발생합니다. 그뿐만 아니라 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기 또한 커집니다. 즉, 가상 머신은 완벽한 운영체제를 생성할 수 있다는 장점은 있지만 일반 호스트에 비해 성능 손실이 있으며, 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다는 단점이 있습니다. 

이에 비해 도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, namespace, cgroup 을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없습니다. 컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 애플리케이션을 구도하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머시에 비해 대폭 줄어듭니다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있습니다. [2]

 


3. 도커 컨테이너 vs. 도커 이미지 (Docker Container vs. Docker Image)

 

 Docker 이미지와 컨테이너가 함께 작동하여 혁신적인 Docker 기술의 잠재력을 최대한 끌어낼 수 있습니다. 하지만, 그들은 특히 초보자에게는 알아차리기 어려울 수 있는 미묘한 차이를 가지고 있습니다.

 

도커 이미지(Docker Image)는 컨테이너(Container)를 만드는 데 사용되는 읽기 전용 템플릿(Read-only templates)입니다.  컨테이너(Docner Container)는 이러한 템플릿에서 생성된 배포된 인스턴스(Deployed Instances)입니다. 

 

 그들의 차이점을 비교하는 간단한 비유는 Docker 이미지를 레시피로 생각하고 Docker Container를 그 레시피에서 준비된 케이크로 생각하는 것이다. 그 요리법은 케이크를 굽는 방법을 설명하고 있다. 만약 당신이 그 레서피를 따라서 요리를 하지 않는다면, 당신은 그 케이크를 먹는 것을 즐길 수 없습니다. 마찬가지로 Docker 이미지의 지침에 따라 Docker Container 를 만들고 시작해야 Docker의 이점을 누릴 수 있습니다. 하나의 레시피에서 가능한 한 많은 케이크를 구울 수 있는 것처럼, 하나의 Docker Image로 여러 개의 Docker Container를 만들 수 있습니다. 하지만 레시피를 바꿔도 기존 케이크의 맛은 변하지 않고, 새로 구운 케이크만 수정된 레시피를 사용할 것입니다. 마찬가지로, Docker Image를 변경해도 이미 실행 중인 Docker Container에는 영향을 미치지 않습니다. 

 

 Docker Image와 Container 간의 차이점을 설명하는 표는 다음과 같습니다. [3] [4] 

 

도커 이미지 vs. 도커 컨테이너 (docker image vs. docker container)


[1] https://www.docker.com/resources/what-container/
[2] 용찬호 지음, “시작하세요! 도커 (Beginning! Docker)”, 우키북스, 2017

[3] Comparing Docker Images to Docker Containers 
  : https://www.whitesourcesoftware.com/free-developer-tools/blog/docker-images-vs-docker-containers/

[4] What is the difference between a Docker Image and a Docker Container

  : https://stackoverflow.com/questions/23735149/what-is-the-difference-between-a-docker-image-and-a-container

 

 

이번 포스팅이 많은 도움이 되었기를 바랍니다. 

행복한 데이터 과학자 되세요! 

 

 

728x90
반응형
Posted by Rfriend
,