쌩로그

01. 도커란 본문

Deploy/Docker

01. 도커란

.쌩수. 2023. 10. 20. 16:09
반응형

목록

  1. 포스팅 개요
  2. 본론
      도커(Docker)
        1-1. 가상 머신과 도커 컨테이너
        1-2. 도커를 시작해야 하는 이유
        1-3. 도커 엔진 설치
  3. 요약

1. 포스팅 개요

이 포스팅은 위키북스 출판사의 '시작하세요! 도커/쿠버네티스'의 제 1장 도커란? 을 학습하며 기록한 포스팅입니다.

2. 본론

도커(Docker)

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

  • 도커는 Go 언어로 작성되었습니다.

  • 2013년 3월에 첫 릴리스가 발표된 이후 지금까지 개발되고 있습니다.

  • 기존에 쓰이던 가상 머신(VM)과는 도커 컨테이너는 성능의 손실이 거의 없습니다.

  • 도커와 관련된 프로젝트에는 다음과 같은 것들이 있습니다.

    • 도커 컴포즈(Docker Compose),
    • 레지스트리(Private Registry),
    • 도커 허브(Docker Hub),
    • Docker for Desktop
  • 일반적으로 도커라고 하면 도커 엔진(Docker Engine)혹은 도커에 관련된 모든 프로젝트를 의미합니다.

    • 보통은 도커 엔진의 의미로 많이 쓰입니다.
  • 도커 엔진은 컨테이너를 생성하고 관리하는 주체로 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트입니다.

  • 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀더 효율적으로 사용하기 위한 것에 불과하므로, 도커의 핵심은 도커 엔진입니다.

1-1. 가상 머신과 도커 컨테이너

  • 기존의 가상화 기술은 하이퍼바이저를 이용하여 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식입니다.
    • 하이퍼바이저 : 물리적 머신(컴퓨터)에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어 참고글
  • 여러 개의 운영체제는 가상 머신이라는 단위로 구별되었습니다.
    • 가상 머신은 하이퍼바이버에 의해 생성되고 관리되는 운영체제는 게스트 운영체제(Guest OS)라고 합니다.
    • 각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받습니다.
    • 가상화 툴로 유명한 것에는 VirtualBox, VMWare 등이 있습니다.

위의 그림처럼 가상머신(왼쪽)은

  • 반드시 하이퍼바이저를 거칩니다.
    • 그렇기 때문에 일반 호스트에 비해 불필요한 성능의 손실이 발생합니다.
    • 가상 머신은 게스트 운영체제를 사용하기 위한 라이브러리, 커널 등을 전부 포함합니다.
      • 때문에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지의 크기가 커집니다.
    • 운영체제를 완벽하게 생성할 수 있는 장점은 있지만, Host PC(실제 PC)에 비해 성능의 손실이 있습니다.

반면에 도커(오른쪽)은)

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

1-2. 도커를 시작해야 하는 이유

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

  • 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간입니다.
  • 컨테이너 내부에서 수많은 소프트웨어를 설치하고 설치파일을 수정해도 호스트 OS에는 영향을 끼치 않습니다.
    • 독립된 개발 환경을 보장받을 수 있습니다.
  • 운영환경에 배포하려고 한다면 컨테이너를 '도커 이미지'라는 패키지로 만들어 운영 서버에 전달하면 됩니다.
    • 운영 서버에서 새롭게 설치할 필요가 없고, 각종 라이브러리 설치 등으로 인한 의존성을 걱정할 필요도 없습니다. (??!!!! 와.. 이게 말이 되는거군요..환경 맞추는게 진짜 하.. 와....하.. 흠.. 여튼 그렇습니다..)
    • 개발했을 때 사용하던 환경을 다른 서버에서도 컨테이너로 똑같이 복제할 수 있기 때문에 개발/운영 환경의 통합이 가능해집니다.
      (ㄷㄷㄷㄷㄷㄷ 와.. 진짜 도커는 필수인거 같습니다.)
    • 도커 이미지는 가상 머신의 이미지와는 달리 커널을 포함하지 않기 때문에 이미지 크기가 크기 않습니다.
    • 도커는 이미지 내용을 레이어 단위(보통 '레이어'라고 표현하면 계층을 의미하던데, 아마 맞을겁니다.)로 구성하며, 중복되는 레이어를 재사용할 수 있어 애플리케이션의 배포 속도가 매우 빨라집니다.

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

모놀리스(Monolith) 애플리케이션

  • 소프트웨어의 여러 모듈이 상호작용하는 로직을 하나의 프로그램 내에서 구동시키는 방식을 의미합니다.
  • 소규모 서비스에는 이 방식이 어울릴지도 모르지만, 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어 자체의 확장성과 유연성이 줄어든다는 단점이 있습니다.

마이크로 서비스(Microservices)

  • 모놀리스 방식을 대체하기 위해 최근에 떠오른 개념입니다.

  • 여러 모듈을 독립된 형태로 구성합니다.

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

    • 예시입니다.
      • 웹 서비스는 데이터베이스 컨테니어와 웹 서버 컨테이너로 분리할 수 있습니다.
      • 웹 서비스에 부하가 발생할 시 마이크로서비스 구조의 웹 서버 컨테이너만을 동적으로 늘려서 부하를 분산할 수 있습니다.
      • 웹 서버와 데이터베이스의 이미지 버전을 독립적으로 관리하기 때문에 유지 보수도 용이해집니다.
      • 예시일 뿐입니다.

위의 이유 외에도 프로젝트 자체의 성숙도, 확장성, 편의성 등이 있습니다.

1-3. 도커 엔진 설치

  • 도커는 리눅스 컨테이너를 제어하는 API를 Go 언어로 구현한 libcontainer를 사용하여 대부분의 리눅스 운영체제에서 사용할 수 있습니다.
    (사견입니다만, Host Pc의 커널을 공유하고, 대부분의 리눅스 운영체제에서 사용가능하다면, 맥에 찰떡이겠습니다..)

도커 엔진의 종류 및 버전

  • 2017년 3월부터 도커 엔진은 도커 EE(Docker Enterprise Edition 쉽게 말해 상업용), 도커 CE(Community Edtion 그냥 무료용)으로 구분되어 제공되고 있습니다.

  • 버전 이름은 17.03-EE 혹은 17.03-CE와 같이 '{출시년도}.{출시월}-{(도커 엔진 종류(EE, CE)}'의 형태로 표기합니다.

  • EE 버전과 CE 버전의 차이는 각종 부가기능을 함께 제공하냐 안 하냐의 여부에 있습니다.

    • EE 버전
      • 각종 기술 지원 및 실제 서비스 단계에서 필요한 각종 부가 기능들을 도커 엔진과 함께 제공합니다.
      • 3개월마다 안정화된 버전으로 릴리스 됩니다.
      • 참고로 2020년 기준 도커 엔터프라이즈는 미란티스(Mirantis)에 인수되어 운영되고 있습니다.
    • CE 버전
      • 도커 엔진 자체의 핵심적인 기능을 무료로 제공합니다.
      • CE는 stable과 edge 버전으로 구분해 각각 3개월, 1개월 단위로 릴리스 되는 차이가 있습니다.
        • 도커 CE의 edge 버전은 새로운 기능을 먼저 사용해 볼 수 있는 장점이 있습니다.(다른 프로그램과 마찬가지로 먼저 시범 운영하는 알파버전이라고 생각하면 될 것 같습니다.)
        • 따라서 안정화 된 버전인 stable 버전을 사용하는 것이 안전합니다.

설치 방법도 나와있지만, 생략합니다... ㅎ

3. 요약

도커에 대한 개요였다고 생각합니다.

도커가 기존의 가상머신과 비교했을 때 어떤 이점이 있는지,
핵심이 무엇인지(도커 엔진)
장점은 무엇이었고,
그외 알고 있으면 좋은 내용들 CE, EE 등 그리고 생략했지만 설치방법 등..
책보니 EC2에 설치하는 법도 나와있네요 ㅎㅎ

누군가좋은 서버엔지니어 출신의 개발자의 추천으로 구매한 책인데, 구매한지 8개월이 지난 후에 책을 펼쳐봤습니다.

컨테이너의 환경을 그대로 가져와서 다른 곳에서 쓸 수 있는 것은 정말... 큰 장점인 거 같습니다.
아무래도 운영 환경 맞추는게 여간 힘든 게 아닌데... 하..
여튼 쿠버네티스까지는 바라지는 않지만, 얼른 도커는 능숙해져야겠다는 생각이 듭니다.
언제 또 포스팅할진 모르지만, 잘 해보겠습니다.

남은 실습을 하러갑니다.
다음 2장 도커 엔진으로 돌아오겠습니다!

728x90
Comments