본문 바로가기
{시리즈}/Docker

1. Docker의 등장 배경

by jay2022 2023. 11. 28.

들어가기 전에

지난 2년이 조금 안 되는 시간 동안 현업에서도 개인적으로도 docker를 사용해 왔다.
그럼에도 내가 도커를 잘 아는가 확신할 수 없다.

도커는 사용하기 쉽다. 반면 기반 지식이 없이 도커가 무엇인지 설명하기 어렵다.
게다가 컨테이너 환경의 필요성을 모른다면 '도커가 굳이 왜 필요한가?'라고 생각할 수도 있다.

도커뿐만 아니라 어떠한 문제를 해결하기 위해 등장한 모든 기술이 그러하다고 생각한다.

  • RDB와 OOP의 패러다임 불일치를 극복하기 위해 등장한 ORM
  • 브라우저의 DOM API 헨들링의 한계를 극복하기 위해 등장한 SPA 프레임워크
  • 온프레미스 (On-premise) 환경의 불편함을 극복하기 위해 등장한 클라우드 서비스

도커를 제대로 이해하기 위해서는 아래와 같은 기반 지식이 있어야 한다.

  • 하이퍼바이저 가상화
  • 도커의 등장 배경과 컨테이너 격리 기술
  • 리눅스의 네임스페이스, cgroup 격리, chroot
  • 도커 Network 트래픽 흐름을 이해하기 위한 기본적인 네트워크 지식

이 모든 지식을 이해하고 사용하면 분명 좋겠지만 꼭 그럴 필요는 없다고 생각한다.
글 서두에 말했듯이 나 또한 완벽하게 도커를 이해한다고 말할 수 없기 때문이다.

그래서 이번 시리즈에서는 도커의 원리 보단 도커의 등장 배경과 사용방법을 중점으로 정리하려 한다.

1. OS를 가상화(서버 가상화) 하이퍼바이저 기술의 등장

1.1. 서버 가상화 기술이 등장하게 된 배경

서버 한대에 여러 앱을 구동하여 사용하는데 서로 충돌이 발생하는 경우가 잦았다.
하나의 서버에서 돌아가는 여러 앱의 충돌을 피하기 위해서는 격리된 독립적인 환경이 필요했다.
이러한 필요성에 의해 등장한 것이 '하이퍼바이저' 기반의 서버가상화 기술이라고 한다.

1.2. 하이퍼바이저(hypervisor) 기반 가상화 기술

하이퍼바이저_가상화

서버 가상화 기술을 구현할 수 있게 하는 소프트웨어 기술을 “하이퍼바이저”라 한다.

  • 히이퍼바이저는 베어메탈(OS 없는 하드웨어)에 직접 또는 'Host OS'를 통해 하드웨어를 가상화 시킨다.
  • 가상화를 통해 하드웨어 자원을 논리적으로 격리하고 나눌 수 있다.
  • 하이퍼바이저에 의해 가상화된 머신은 'VM(가상머신)'이라는 단위로 구분한다.
  • VM마다 OS가 필요하며 이를 'Guest OS'라고 한다.

하이퍼바이저의 주 역할

  1. 가상화된 Guest OS들에게 하드웨어 자원을 분배하는 역할을 수행한다.
  2. Guest OS들에서 넘어온 명령을 Host OS 또는 하드웨어로 전달한다.

1.3. Guest OS

하이퍼파이저에 의해 각 VM에는 여러 OS가 설치될 수 있다.
그리고 하이퍼파이저에 의해 생성되고 관리되는 OS는 Guest OS 또는 게스트 운영체제라고 부른다.

  • Guest OS는 다른 Guest OS와 완전히 격리되어 독립된 시스템 자원을 할당받아 사용된다.
  • HostOS를 가상화 하는 대표적인 하이퍼파이저는 VirtualBox와 VMware가 있다.

1.4. 하이퍼바이저를 사용하는 서버 가상화의 단점

  1. 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 한번 거친다.
    즉, 하나의 계층이 더 생기기 때문에 일반 호스트에 비해 성능이 떨어진다.
  2. 가상 머신에는 Guest OS가 위한 라이프러리, 커널 등을 전부 포함된다.
    때문에 배포용 이미지 크기가 거대해진다.
  3. 결론적으로 하이퍼바이저는 VM 마다 OS를 설치하고 사용해야 하기 떄문에 무겁다.

2. 컨테이너 기반 가상화 기술 등장

2.1. 컨테이너 기반 가상화의 등장 배경

앞서 설명했듯 하이퍼바이저의 가상화는 VM마다 OS를 생성하고 사용하기 때문에 무겁고 느리다.
이러한 한계를 극복하기 위해 경량화된 컨테어너 기반 가상화 기술이 등장하였다.

컨테이너 가상화 기술은 2000년대부터 등장했다고 한다.
하지만 보편적으로 사용하게 된 시점은 'Docker'가 공개된 2013년 이후이다.

도커는 컨테이너 가상화를 지원하는 여러 소프트웨어의 일종이다.
도커는 기존 컨테이너 소프트웨어의 여러 한계와 편의성 개선이 반영된 소프트웨어라고 한다.
그리고 현재는 컨테이너 가상화 기술을 상징하는 고유명사 처럼 사용된다.

2.2. 컨테이너 기반 가상화 기술

컨테이너_가상화|500

컨테이너는 가상화는 격리 공간을 생성하기 위해 리눅스 자체 기능인
chroot, namespace, cgroup를 사용함으로써 프로세스 단위의 격리 환경을 만든다.

  • chroot : Change Root Directory 줄임말로 루트(/) 디렉토리를 다른 디렉토리로 변경하는 기술
  • cgroup : CPU, Memory, Storage 같은 하드웨어 리소스를 가상화
  • namespace : 파일시스템, 네트워크 같은 리소스를 가상화

즉, 도커는 리눅스 기술을 사용하여 프로세스를 컨테이너로 격리하여 실행시키는 소프트웨어이다.

  • Host OS위에서 컨테이너를 실행시키는 엔진(프로세스)이다.
  • 모든 컨테이너는 도커에 의해 실행된 프로세스이다.

2.3. 컨테이너 기반 가상화 장점 비교

가상화비교

  • 컨테이너 안에는 앱을 구동하는데 필요한 라이브러리 및 실행 파일만 존재한다.
  • 컨테이너를 만드는 이미지에는 OS가 필요 없기 때문에 이미지와 컨테이너 모두 가볍다.
  • 이미지를 만들어 배포하는 시간 또한 빨라진다.
  • 가장 중요한 점은 생성된 컨테이너 사용할 때 성능손실이 거의 없다는 점이다.
    • 도커 컨테이너는 결국 OS 위에서 실행되는 프로세스이기 떄문이다.

외에도 동일한 이미지로 생성된 컨테이너들은 모두 같은 동작을 보장받는 등 다양한 장점이 존재한다.

참고

'{시리즈} > Docker' 카테고리의 다른 글

4. Docker 명령어 알아보기  (2) 2023.12.04
3. Docker 사용을 위한 환경 이해하기  (0) 2023.12.01
2. Docker란  (1) 2023.11.28