완벽한 IT 인프라 구축을 위한 Docker <책 요약 4>

YP J·2024년 2월 20일

컨테이너 기술과 Docker의 개요

  • Docker는 컨테이너 기술을 사용해서 애플리케이션의 실행 환경을 구축 및 운용하기 위한 플랫폼이다.

  • 컨테이너란?

    • 컨테이너는 애플리케이션을 실행하는 데 필요한 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정을 패키지화하는 가벼운, 독립적인 실행 단위입니다.
    • 이 기술은 애플리케이션을 격리된 환경에서 실행할 수 있게 해주며, 여러 환경(개발, 테스트, 프로덕션) 간에 일관된 동작을 보장합니다.
  • 주요 특징 및 장점

    • 경량성: 컨테이너는 가상 머신(VM)에 비해 훨씬 가볍습니다. 컨테이너는 게스트 운영 체제를 필요로 하지 않으며,

    • 호스트 시스템의 커널을 공유합니다. 이로 인해 시작 시간이 짧고 오버헤드가 적습니다.

    • 이식성: 컨테이너는 애플리케이션과 그 종속성을 함께 패키지화하기 때문에, 어떤 환경에서든 동일하게 실행될 수 있습니다.

    • 격리성: 각 컨테이너는 자체 파일 시스템을 가지며, 프로세스, 메모리, 네트워크 등에서 다른 컨테이너와 독립적으로 실행됩니다.

    • 이는 애플리케이션 간의 충돌을 방지하고 보안을 강화합니다.

    • 자동화된 배포: 컨테이너는 CI/CD(지속적 통합 및 지속적 배포) 파이프라인과 잘 통합되어,

    • 애플리케이션의 자동화된 테스트 및 배포를 용이하게 합니다.

  • 사용 사례

    • 마이크로서비스 아키텍처: 컨테이너는 서비스를 미세하게 분리하고 독립적으로 배포 및 확장할 수 있는 마이크로서비스 아키텍처에 적합합니다.
    • 개발 및 테스트: 컨테이너를 사용하면 개발자는 로컬 환경에서 실제 프로덕션 환경과 동일한 조건을 쉽게 재현할 수 있습니다.
    • 클라우드 네이티브 애플리케이션: 컨테이너는 클라우드 환경에서 애플리케이션을 개발, 배포 및 관리하기 위한 기본 단위가 되었습니다.
  • 도커는 컨테이너 기술 그자체 이다. 그럼 도커말고 또 컨테이너화 하는 기술이 있을까?

      1. rkt (발음은 "Rocket")
      • 개요: CoreOS에서 개발한 rkt는 보안과 성능에 중점을 둔 컨테이너 엔진입니다.
      • rkt는 애플리케이션 컨테이너의 표준인 AppC를 지원하며, Docker 이미지와 OCI(Open Container Initiative) 이미지도 실행할 수 있습니다.
      • 특징: rkt는 각 컨테이너를 별도의 프로세스로 실행하는 대신, 가벼운 가상 머신 내에서 컨테이너를 격리하여 실행함으로써 보안을 강화합니다.
      1. Podman
      • 개요: Podman은 Docker와 호환되는 명령어를 제공하며, 루트 권한 없이 컨테이너를 실행할 수 있는 기능을 갖춘 컨테이너 엔진입니다.
      • 특징: Podman은 데몬리스(데몬 없이) 작동하기 때문에 시스템 자원을 더 적게 소모하며, Docker에 비해 보안성이 높다는 장점이 있습니다.
      1. containerd
      • 개요: Docker Inc.에 의해 개발된 containerd는 컨테이너 런타임으로, Docker 엔진의 핵심 컴포넌트 중 하나로 시작되었습니다.
      • 특징: containerd는 OCI 표준을 준수하며, 이미지 관리, 컨테이너 실행, 저장소 관리 등 컨테이너의 기본적인 기능을 제공합니다. Kubernetes와 같은 오케스트레이션 도구와 함께 사용됩니다.
      1. CRI-O
      • 개요: CRI-O는 Kubernetes Container Runtime Interface(CRI)를 구현한 경량 컨테이너 런타임입니다.
      • 특징: CRI-O는 Kubernetes와 원활하게 통합되도록 설계되었으며, OCI 호환 컨테이너 이미지를 실행할 수 있습니다.
      1. LXC/LXD
      • 개요: LXC(Linux Containers)는 운영 체제 수준의 가상화를 제공하는 리눅스 컨테이너입니다. LXD는 LXC의 확장으로, 더 쉬운 컨테이너 관리와 가상 머신에 가까운 경험을 제공합니다.
      • 특징: LXC와 LXD는 전체 가상 머신보다 가벼운 격리를 제공하며, 리눅스 시스템을 효율적으로 활용할 수 있게 해줍니다.

2.1 컨테이너 기술의 개요

컨테이너

  • 호스트 OS상에 논리적인 구획(컨테이너)를 만들고

  • 애플리케이션을 작동시키기위해 필요한 라이브러리나 소스코드 등을 하나로 모아

  • 마치 별도의 서버인 것처럼 사용할수 있게한것.

  • 호스트 OS의 리소스를 논리적으로 분리시키고 여러개의 컨테이너가 공유하여 사용한다.

  • 만약 컨테이너 기술을 사용하지 않으면 데이터 저장하는 디렉토리 공유하게 되고

  • 서버에 설정된 동일한 IP주소로 통신한다.

  • 컨테이너 기술을 사용한다면 OS, 디렉토리 ,IP 주소 등과 같은 시스템 자원을

  • 마치 각 애플리케이션이 점유하고 있는 것처럼 보이게 할수있다.

서버 가상화 기술 이모저모

    1. 호스트형 서버 가상화
    • 하드웨어 상에 베이스가 되는 호스트 OS설치하고
    • 호스트 OS에 가상화 소프트웨어를 설치한후,
    • 이 가상화 소프트웨어 상에서 게스트OS를 작동시키는 기술.
      • Oracle VM VirtualBox, VMware Workstation player ...
    • BUT 호스트 OS사에서 다른 게스트OS를 움직이고 있기 때문에 오버헤드가 커진다.
    1. 하이퍼바이저형 서버 가상화
    • 하드웨어 상에 가상화를 전문으로 수행하는 소프트웨어인 '하이퍼바이저'를 배치 해서 하드웨어와 가상화 환경을 제어 한다.
      • Microsoft Windows Server 의 Hyper-V ...
    • 호스트 OS 없이 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있따.
    • 단 가상환경마다 별도의OS가 부팅 되므로 시작에 걸리는 오버헤드가 있다.
    • 펌웨어로 구축하는 경우가 많다
      • 펌웨어?
        (펌웨어(Firmware)는 하드웨어를 제어하고 특정 기능을 실행하기 위해 내장된 소프트웨어 프로그램 또는 코드입니다. 펌웨어는 일반적으로 하드웨어에 고정되어 있으며, 하드웨어가 의도한 대로 작동하도록 초기화, 관리, 제어하는 역할을 합니다.)

profile
be pro

0개의 댓글