도커! 도커란 무엇인가?

2023. 4. 25. 19:05 컨테이너/docker

위 이미지는 도커의 공식 로고입니다.컨테이너를 실은 화물선을 고래 캐릭터로 형상화해서 귀여운 이미지라는 생각이 듭니다.

 

자~ 이제! 본격적으로 시작하겠습니다.

 

도커란 무엇인가?

  • Docker는 2013년에 세상에 첫 선을 보였습니다.
  • Docker는 Go 언어로 개발된 오픈 소스 프로젝트입니다.
  • Docker는 컨테이너 기반 오픈 소스 가상화 플랫폼입니다.
  • Docker와 관련된 프로젝트는 도커 컴포즈(Docker Compose), 도커 머신(Docker Machine), 레지스트리(Private Registry) 등이 있습니다.
  • 일반적으로 불리우는 Docker는 도커 엔진(Docker Engine)을 의미하고 있습니다.
  • 도커 엔진(Docker Engine)은 컨테이너 생성 및 관리하는 주체로, 컨테이너를 제어할 수 있고 다양한 기능들을 제공합니다.

 

도커의 특징

  • 플랫폼에 상관없이 실행 가능한 애플리케이션 컨테이너를 만드는 기술입니다.
  • 하이퍼바이저(Hypervisor) 없이 리눅스 컨테이너(LinuX Containers, LXC) 기술을 바탕으로 애플리케이션을 격리된 상태로 실행할 수 있는 가상화 솔루션입니다.

여기서, 하이퍼바이저(Hypervisor)와 리눅스 컨테이너(LinuX Containers, LXC)는 무엇일까라는 생각이 들 수 있습니다.

하이퍼바이저(Hypervisor)란

  • 호스트 PC에서 다수의 운영체제를 동시에 실행하기 위한 플랫폼입니다.
  • 예를 들어, 개인 노트북에 현재 설치되어 있는 운영체제를 Windows 10(64 bit)이 설치되어 있다고 가정을 해보겠습니다.
    • 현재 사용하는 운영체제는 Windows 10(64 bit) 인데, Ubuntu 운영체제를 사용해야 하는 상황이 발생했습니다.
    • 노트북 컴퓨터에 설치되어 있는 운영체제인 Windows 10을 밀고, Ubuntu를 설치해야 할까요?
    • 하이퍼바이저를 이용해서 사용하면 됩니다. 이 때, 어떻게 Ubuntu 운영체제를 사용할까요?
    • Windows 10 운영체제에 하이퍼바이저를 설치하고, 하이퍼바이저 내에 Ubuntu 운영체제를 설치해 사용하면 됩니다.

  • 하이퍼바이저의 종류로는 두 가지가 있습니다. Type 1, Type 2가 있습니다.
  • 먼저 Type 1입니다.
    • Type 1은 “Native” 또는 “Bare metal” 하이퍼바이저라고 합니다.
    • 호스트의 하드웨어에서 직접 실행되어 하드웨어를 제어하고 가상 시스템(게스트 OS)을 관리하는 하이퍼바이저입니다.
    • 즉, 하드웨어 직접 설치되어 여러 개의 운영체제를 실행할 수 있다고 볼 수 있습니다.
    • 게스트 운영체제는 두 번째 수준으로 실행이 됩니다.
    • Type 1의 하이퍼바이저의 예로는 하이퍼Citrix의 XenServer, VMware의 ESX Server, L4 마이크로커널, MS의 Hyper-V 등이 있습니다.
  • Type 2입니다.
    • Type 2는 Hosted 하이퍼바이저라고 합니다.
    • 호스트 운영체제에서 실행되고, 가상 시스템(게스트 OS)은 하드웨어 위 세 번째 수준으로 실행이 됩니다.
    • 즉, 호스트 운영체제에서 하이퍼바이저를 설치하고 그 하이퍼바이저를 통해 가상 시스템을 설치해 실행하는 것으로 볼 수 있습니다.
    • Type 2의 하이퍼바이저의 예로는 VMware의 VMware Workstation, VMware Player, Oracle VM의 VirtualBox 등이 있습니다.

 

리눅스 컨테이너 (LinuX Containers, LXC)란

  • 위키 백과에서는 다음과 같이 정의합니다.
  • 리눅스 컨테이너는 “단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템(컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법이다.
    • 이 다음의 내용은 이곳에서 확인하시길 바랍니다.

 

  • 리눅스 컨테이너는 application과 실행에 필요한 모든 사항들을 포함하는 software 패키징 개념으로 볼 수 있습니다.
  • 쉽게 말해 application의 종속성과 함께 application을 독립적으로 캡슐화한 것으로 볼 수 있습니다.

 

도커 컨테이너 VS 가상 머신

Docker Containers vs Virtual Machine

 

위 그림은 도커 컨테이너와 가상 머신을 비교한 그림입니다.

가상 머신(Virtual Machine)

기존 가상화 기술은 하이퍼바이저(Hypervisor)를 이용해 여러 개의 운영체제들을 하나의 호스트 OS에서 사용하는 방식이었습니다. 하이퍼바이저에서 생성되고 관리되는 운영체제를 가상 머신(Virtual Machine) 또는 게스트 운영체제(Guest OS)라고 합니다.
가상 머신은 하이퍼바이저에 의해 생성된 다른 게스트 운영체제와 분리 독립된 공간과 자원을 할당받아 사용됩니다. 가상 머신은 안정 및 보안성 관련 측면에서는 효율적으로 볼 수 있지만, 일반 호스트 운영체제에 비해 성능의 손실이 발생됩니다. 가상 머신을 이미지로 생성 시, 굉장히 많은 용량을 가지게 됩니다. 이에 이미지를 배포 시, 용량으로 인해 부담이 존재한다는 단점이 있습니다.

 

도커 컨테이너(Docker Containers)

도커 컨테이너는 가상화 공간을 생성하기 위해 리눅스의 자체적인 기능인 chroot, 네임스페이스(namespace), cgorup을 사용합니다. 프로세스 단위의 분리 독립된 환경을 생성하기 때문에 성능 손실은 희박합니다.
도커 컨테이너에서 필요한 커널은 호스트의 커널을 공유해서 사용합니다. 컨테이너 내부는 application을 실행하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 생성 시, 가상 머신을 이미지로 생성했을 때에 비해 굉장히 적은 용량으로 이미지를 생성할 수 있습니다. 이미지를 배포하는데도 시간적으로도 빠르며, 성능 손실 부분이 희박하다는 점에서도 장점이 있습니다.

 

Reference