땡글이LAB

[도커/쿠버네티스] 도커란? 본문

Devops/도커, 쿠버네티스

[도커/쿠버네티스] 도커란?

땡글이B 2022. 7. 12. 17:58

 도커는 리눅스 컨테이너에 여러 기능을 추가함으로써, 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만드러진 오픈소스 프로젝트입니다. 도커는 Go 언어로 작성되어 있다. 

 

 기존에 쓰이던 가상화 방법인 가상 머신과는 달리 도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로서 주목받고 있다.

 

 기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다. 이러한 여러 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상머신에는 우분투(Ubuntu), CentOS 등의 운영체제가 설치되어 사용된다.

 

 하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제(Guest OS)라고 하며, 각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다. 이러한 가상화 방식을 사용할 수 있는 대표적인 툴로는 VirtualBox, VMware등이 있다. 

  • 가상 머신 모니터라고도 하는 하이퍼바이저는 가상 머신을 생성하고 실행하는 프로세스입니다. 하이퍼바이저는 메모리 및 처리와 같은 단일 호스트 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상 머신을 지원할 수 있도록 합니다.
    • 하이퍼바이저를 사용하면 게스트 가상 머신이 호스트 하드웨어와 독립되어 시스템의 가용 리소스를 더 많이 활용하고 IT 모빌리티를 향상할 수 있습니다. 이를 통해 가상 머신을 여러 서버 간에 쉽게 이동시킬 수 있습니다.
  • VirtualBox에서 MacOS(ARM 계열)는 지원하지 않는다. 

 

 

그러나 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다. 그뿐만 아니라 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기 또한 커진다. 

즉, 가상머신은 완벽한 운영체제를 생성할 수 있다는 장점은 있지만 일반 호스트에 비해 성능 손실이 있을 수 있으며, 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다는 단점이 있다.

 

도커(Docker)

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

 

도커의 장점

애플리케이션의 개발과 배포가 편하다.

서버를 부팅할 때 실행되는 운영체제를 일반적으로 '호스트OS'라고 부른다. 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간을 의미해서 컨테이너 자체에 특별한 권한을 주지 않는 한, 컨테이너 내부에서 수많은 소프트웨어를 설치하고 설정파일을 수정해도 호스트 OS에는 영향을 끼치지 않는다. 즉, 독립된 개발환경을 보장받을수 있다.

 

 그리고 컨테이너 내부에서 작업을 마친 뒤 운영환경에 배포하려 한다면 해당 컨테이너를 '도커 이미지'라고 하는 일종의 패키지로 만들어 운영 서버에 전달하기만 하면 된다. 즉 운영 서버에서 새롭게 패키지를 설치할 필요도 없고, 각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요도 없다. 서비스를 개발했을 때 사용했던 환경을 다른 서버에서도 컨테이너로서 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해진다. 

 

 또한 도커 이미지는 가상 머신의 이미지와 달리 커널을 포함하고 있지 않기 때문에 이미지 크기가 그다지 크지 않고, 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있어서 애플리케이션의 배포 속도가 매우 빨라진다는 장점도 있다. 

 

여러 애플리케이션의 독립성과 확장성이 높아진다.

 소프트웨어의 여러 모듈이 상호 작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식을 모놀리스(Monolith) 애플리케이션이라고 한다. 소규모 서비스에서는 이 방식이 어울릴지 모르지만 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어 자체의 확장성과 유연성이 줄어든다는 단점이 있다. 이러한 모놀리스 방식을 대체하는 방식이 바로 마이크로서비스 구조(Microserivce Architecture : MSA)이다. 

이 블로그의 "컨테이너 인프라 환경" 이라는 글에서 다루었다.

 

마이크로서비스 구조는 여러 모듈을 독립된 형태로 구성하기 때문에 종속되지 않고, 변화에 빠르게 대응할 수 있으며 각 묘듈의 관리가 쉬워진다는 장점이 있다. 컨테이너는 수 초내로 생성, 시작이 가능할 뿐만 아니라 여러 모듈에게 독립된 환경을 동시에 제공할 수 있기 때문에 마이크로서비스 구조에서 가장 많이 사용되는 가상화 기술이다.

  • 예를 들어, 웹 서비스는 컨테이너와 웹 서버 컨테이너로 분리할 수 있고, 웹 서비스에 부하가 발생할 시에 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산할 수 있다. 또한 웹 서버와 데이터베이스의 이미지 버전을 독립적으로 관리하기 때문에 유지 보수도 용이해진다. 이와 같이 컨테이너 기반의 마이크로서비스는 개발자가 그 구조를 직접 구현하기보다는 도커 스웜모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 사용하는 것이 일반적이다. 

 

 

도커 관련 프로젝트

 도커와 관련된 프로젝트로는 도커 컴포즈, 레지스트리, 도커 허브, Docker for Desktop 등 여러 가지가 있지만 일반적으로 도커라고하면 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 뜻한다. 보통 도커 엔진이라는 의미로 더 많이 쓰이는데 도커 엔진은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이기 때문이다. 

 

 

도커 설치 (Mac M1)

아래 사이트에서 각 운영체제에 맞게 다운로드한다. 

https://docs.docker.com/desktop/mac/install/

 

Install Docker Desktop on Mac

 

docs.docker.com

 

 

References

 

 

Comments