컨테이너란 무엇이며 왜 컨테이너인가

  • 컨테이너


    • 응용프로그램의 종속성과 함께 응용프로그램 자체를 캡슐화한 것
    • 일반적인 VM과 같이 운영체제(OS)의 격리된 인스턴스 형태
    • VM에서는 어렵거나 불가능한 것들을 가능하게 제공
      • 호스트 OS 자원 공유하여 자원을 좀 더 효율적으로 사용
      • 빠른 실행 및 중지
      • 컨테이너에서 실행되는 응용프로그램은 호스트OS에서 네이티브로 실행되는 응용프로그램에 비해 발생시키는 오버헤드는 거의 없음
      • 운영 환경의 변경으로 인해 발생하는 모든 버그를 없앨 수 있음(이식성 = portability)
        • “내 컴퓨터에서는 잘 동작하는데!” 따위 이야기는 할 필요가 없다.
      • 가벼워서 많은 수의 컨테이너를 동시에 실행 가능
        • 운영 엔지니어는 VM 자체를 운영하는 것이 아니라 하나의 호스트 머신에서 여러 개의 컨테이너를 운영
      • 컨테이너는 최종 사용자와 개발자가 클라우드 배포 가능


  • VM VS 컨테이너


    • VM = 외부 환경을 완전하게 에뮬레이트하는 목적



      • 출처 : https://www.docker.com/what-docker
      • Hypervisor(Virtualbox, VMWare 등)는 VM들을 생성하고 실행 및 기본 OS와 하드웨어 접근 제어
      • 각 VM들은 OS전체, 실행할 응용프로그램과 모든 라이브러리들을 가지고 있어야함


    • 컨테이너 = 응용프로그램의 이식성과 독립성에 목적



      • 출처 : https://www.docker.com/what-docker
      • VM과 달리 호스트의 커널은 실행되는 컨테이너들 사이 공유 = 컨테이너들은 항상 호스트와 같은 커널에서 실행
    • VM과 컨테이너는 응용프로그램을 같은 호스트에서 실행되는 다른 응용프로그램으로 부터 격리


  • Docker와 컨테이너


    • Docker 플랫폼은 두 개의 독립된 컴포넌트로 구성
      • Docker Engine
        • 컨테이너 생성, 실행
        • 빠르고 칸편한 인터페이스 제공
        • Docker 이전 리눅스 컨테이너(LXC) 같은 기술이 있었지만 전문적인 지식 및 작업이 어려워 불편
      • Docker Hub
        • 컨테이너 배포를 위한 클라우드 서비스 제공
        • 다운로드할 수 있는 막대한 양의 컨테이너 이미지 제공
        • 다른 사람들이 이미 작업해 둔 애용 그대로 이용 가능
      • Docker가 개발한 도구 제공
        • 클러스터링 관리자 - Swarm
        • GUI를 이용해 컨테이너 작업 - 카이트매틱
        • Docker Host를 생성하기 위한 명령 유틸리티 - Machine


  • Docker의 역사


    • 2008년 솔로몬 하익스(Solomon Hykes)가 언어 중립적인 PaaS를 제공하는 dotCloud 설립(현재는 Docker의 CTO)


    • 출처 : https://www.docker.com/company/management

    • 당시 타사 PaaS는 특정 언어 종속 - Heroku : Ruby, Google App Engine : Java, Python
    • dotCloud 자사 핵심 기술 Docker를 커뮤니티 주도 프로젝트로 전환
      6개월만에 github star 6700개, 직원 외 contributor 175명
    • dotClout => Docker 회사명 변경
    • Docker 0.1 버전 => 1.0 버전 15개월(2014년 6월 발표)
      이미 당시 Spotify, Baidu 운영계 사용
    • Docker Hub(컨테이너들의 공용 저장소) 출시하며 플랫폼으로 진화 노력
    • 2014년 12월 Docker Swarm 발표
      • Docker와 Docker Machine을 위한 클러스터 관리자
      • Docker host를 프로비저닝(사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비)하는 CLI도구 제공
    • 2015년 6월 FreeBSD 프로젝트 Docker 지원 발표
    • 2015년 8월 MS 윈도우 서버용 Docker Engine tech preview 버전 공개


  • 64-bit linux


    • 현재 기준 안정적이면서 상용화 가능한 Docker Platform은 linux 64bit
    • 윈도우, os x 사용자는 VM 안에서 Docker 실행가능
    • BSD, solaris, 윈도우 서버 등과 같은 다른 플랫폼의 네이티브 컨테이너에 대한 지원은 각기 다른 단계에서 개발 진행
    • Docker는 기본적으로 가상화 관련 작업 하지 않음 그래서 container는 호스트 커널과 항상 일치해야 함
      (윈도우 서버 container는 윈도우 서버 호스트에서만 실행, 64bit linux container는 64bit linux 호스트에서만 실행 가능)