도커

changhwan·2022년 1월 19일
0

도커란

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

도커는 Go 언어로 작성돼 있으며, 기존 가상화 방법인 가상 머신과는 다르게 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로 자리 잡게 되었다.

도커와 관련된 프로젝트는 도커 컴포즈, 레지스트리, 도커 허브 등등 여러 가지가 있지만 일반적으로 도커라고 하면 도커 엔진 혹은 도커에 관련된 모든 프로젝트를 의미한다.


가상 머신과 도커 컨테이너

기존의 가상 머신은 '하이퍼바이저'를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다.

이러한 방식으로 생성된 여러 개의 OS는 '가상 머신'이라는 단위로 구별되며 'Guest OS'라고 한다. 추가적으로 가상 머신의 핵심은 'Guest OS'들이 각각 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다는 점이다.

하이퍼 바이저란?

  • 가상화 머신 모니터 or 가상화 머신 매니저로 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼을 의미한다.

가상 머신의 단점

Guest OS들은 생성되기 위해 반드시 가상 머신을 거치기 때문에 일반 호스트에 비해 성능의 손실이 발생한다. 뿐만 아니라 가상 머신은 Guest OS를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기 또한 커진다.

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

도커 컨테이너

가상 머신은 한계점이 뚜렷하다 반면 도커 컨테이너는 가상하된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.

컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너 안에는 '애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에' 컨테이너를 이미지로 만들었을 때 이미지 용량 또한 가상 머신에 비해 대폭 줄어든다.

따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다는 장점이 있다.


chroot란

  • chroot란 가상의 root를 만드는 기술 이란 의미로 프로그램이 실행되는 root directory를 변경하는 것을 말한다. 어떠한 한 프로세스는 그 프로세스의 환경 변수에 루트 디렉토리에 대한 정보를 가지고 있다. 그 프로세스가 찾아가는 모든 경로는 그 루트디렉토리에서 시작하게 되는데, chroot은 이 경로를 바꿀 수 있도록 해준다.

네임스페이스란?

  • Namespace는 한 개의 특정 프로세스에 대해 시스템 리소스를 논리적으로 격리하는 기능이다

cgroup

  • cgroup은 단일 또는 태스크 단위의 프로세스 그룹에 대한 자원 할당을 제어하는 커널 모듈입니다.

도커를 시작해야 하는 이유

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

  • 사용자의 독립된 개발 환경을 보장받을 수 있다.
    • 도커 컨테이너는 호스트 OS 위에서 동작하는 격리된 공간이다. 따라서 컨테이너 자체에 특별한 권한을 주지 않는 한 컨테이너 내부에서 발생한 일이 호스트 OS에 영향을 끼치지 않는다.
  • 개발/운영 환경의 통합이 가능해진다.
    • 여러 작업을 마치고 이를 운영 환경에 배포하려고 한다면 해당 컨테이너를 이미지화 하여 운영 서버에 전달만 하면 된다.
    • 컨테이너에서 사용되던 패키지를 운영서버에서 새롭게 설치할 필요도 없으며, 각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요도 없다.
    • 따라서 서비스를 개발했을 때 사용했던 환경을 다른 서버에서도 컨테이너로서 똑같이 복제할 수 있기 때문에
  • 애플리케이션 배포 속도가 매우 빨라진다.
    • 도커 컨테이너는 가상 머신 이미지와 달리 커널을 포함하고 있지 않기 때문에 이미지 크기가 크지 않다.
    • 또한 도커는 이미지 내용을 레이어 단위로 구성하며, 중복되는 레이어를 재사용할 수 있기 때문에 배포 속도가 매우 빨라진다.

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

  • MSA 환경을 구성하기 용이하다.
    • 마이크로서비스 구조는 여러 모듈을 독립된 형태로 구성하기 때문 언어에 종속되지 않고 변화에 빠르게 대응할 수 있기 때문에 각 모듈의 관리가 쉬워진다는 장점이 있다.
    • 도커는 여러 모듈에게 독립된 환경을 동시에 제공할 수 있다는 점 때문에 MSA 구조에서 강점을 가진다.

마무리

Docker는 기존 가상 머신의 단점을 극복하여 현재 가상화 기술의 표준이며, 가상 머신과는 다르게 호스트 OS와는 완전히 독립된 개발 공간을 확보해준다는 점에서 성능 저하를 최소화 했다.

추가적으로 개발 환경을 Docker Image로 만들어 Hub에 올려서 Image를 사용한다면 배포도 매우 빠르게 할 수 있으며 호환성을 걱정하지 않아도 된다.

이러한 장점들 때문에 특히나 MSA 기반으로 서비스가 많이 운영되고 있는 서비스일 수록 도커를 잘 활용하여 DevOps 환경을 잘 구성하는 것이 중요하다.

profile
Junior Backend Developer

0개의 댓글