본문 바로가기
Programming/운영체제

컨테이너란?

by HBGB 2021. 8. 31.

컨테이너의 개념

  • 하나의 OS 커널로 여러개의 독립된 것처럼 보이는 환경을 운용하기 위한 가상화 형태입니다.
  • 쉽게 말하면 격리된 사용자 공간의 인스턴스, 즉 독립된 환경을 하나의 프로세스로 실행하는 것입니다.
사용자 공간과 컨테이너
  • OS는 물리적 자원을 관리하는 "커널공간"과 사용자 프로세스(애플리케이션)을 실행하는 "사용자 공간"으로 나뉩니다.
  • 컨테이너는 이러한 사용자 공간을 분리하여 각각 고유한 프로세스 테이블, 파일 시스템, 네트워크 등의 자원을 관리할 수 있게끔 합니다.
  •  

    Untitled (6)

     

     

     

    컨테이너의 역사

    Untitled (7)

    연도 Name 주요내용
    1979 UNIX의 chroot UNIX에 chroot 시스템 콜이 도입됨. 프로세스가 바라보는 루트 디렉토리를 파일 시스템 상의 특정한 디렉토리로 변경하는 기능
    2000 FreeBSD jail UNI의 chroot를 발전시킴. 컴퓨터 시스템을 jail이라는 독립적인 작은 시스템으로 분리하는 기능
    2003 The Borg System
    By Google
    Kubernetes의 기초가 되는 컨테이너 오케스트레이션 시스템
    2005 Open VZ
    (Open Virtuzzo)
    커널을 공유하면서 분리된 공간을 제공하여 현재의 컨테이너 개념과 동일해짐
    2008 LXC
    (Linux Containers)
    cgroup 및 네임스페이스를 사용하여 구현하여 단일 Linux 커널에서 동작하는 컨테이너
    2013 도커 (Docker) LXC와 AUFS를 조합한 가상화 엔진. 컨테이너 기술의 확산에 기폭제 역할
    2015 쿠버네티스
    (Kubernetes)
    구글에서 오픈소스로 기증한 컨테이너 스케줄러 / 오케스트레이션 도구
    2016 Containerd Docker에서 containerd가 분리됨

     

     

     

    컨테이너를 구성하는 대표적인 기술들

    namespace

    • 시스템 자원을 논리적으로 분할하여 프로세스가 접근할 수 있는 자원의 범위를 제한하는 기능입니다.

    cgroup

    • 컨테이너들이 사용하는 호스트 OS가 이용할 수 있는 자원 사용량의 제한을 설정하는 기능입니다.

     

     

     

    컨테이너와 가상머신의 차이

    • 컨테이너는 운영체제 수준의 가상화 기술이고, 가상머신은 하드웨어 수준의 가상화 기술이며 하이퍼바이저를 통해 관리됩니다.
    • 컨테이너는 호스트의 커널을 공유하지만, 가상머신은 각 머신마다 전용 OS가 필요합니다.

    Untitled (9)

     

     

     

    컨테이너의 종류

    시스템 컨테이너

    • 호스트 OS 위에 하드웨어 가상화 없이 또다른 OS를 실행합니다.
    • 하나의 컨테이너에서 독립된 환경을 공유하는 다수의 프로세스를 실행하는 것을 목표로 합니다.
    • ex) LXC(리눅스 컨테이너)

    애플리케이션 컨테이너

    • 하나의 컨테이너에서 하나의 애플리케이션(프로세스)를 실행하는 것을 목표로 합니다.
    • 하나의 프로세스만 실행하므로 확장이 쉽고 관리가 용이합니다.
    ex) 도커 컨테이너

    도커는 컨테이너다?

    • 도커는 어플리케이션 개발, 전송, 실행을 위한 오픈 플랫폼입니다.
    • 좁은 의미에서의 도커의 컨테이너는 도커 이미지가 실행된 상태를 의미합니다.
      Untitled (8)

     

     

     

     

     

     

    참고)

    https://www.44bits.io/ko/keyword/linux-container#리눅스-네임스페이스linux-namespace

    https://ko.wikipedia.org/wiki/Cgroups

    https://www.44bits.io/ko/post/change-root-directory-by-using-chroot

    http://www.opennaru.com/openshift/container/what-is-the-difference-between-docker-lxd-and-lxc/

    https://library.gabia.com/contents/infrahosting/7426/

    https://cvw.cac.cornell.edu/Checkpoint/containers

    http://www.opennaru.com/openshift/container/history-of-the-container/

    http://www.opennaru.com/opennaru-blog/docker-as-a-top-new-open-source-project/

    댓글