[study] 컨테이너 기술과 도커의 개요

컨테이너 기술의 개요

컨테이너

docker

  • 컨테이너란 호스트 OS상에 놀리적인 구획(컨테이너)을 만들고, 애플리케이션을 작동시키기 위해 필요한 라이브러리나 애플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것
  • 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용
  • 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동
  • 컨테이너를 사용하면, OS나 디렉토리, IP 주소 등과 같은 시스템 자원을 마치 각 애플리케이션이 점유하고 있는 것처럼 보이게 할 수 있다.
  • 애플리케이션의 실행에 필요한 모듈을 컨테이너로 모을 수 있기 때문에 여러 개의 컨테이너를 조합하여 하나의 애플리케이션을 구축하는 마이크로 서비스형 애플리케이션과 친화성이 높은 특징 가짐

서버가상화

  • 컨테이너 기술은 애플리케이션의 실행 환경을 모음으로써 이식성을 높이고 확장성이 좋은 환경에서 작동하는 것을 지향
  • 가상화 기술의 대부분은 서로 다른 환경을 어떻게 효율적으로 에뮬레이트할지라는 점을 지향

호스트형 서버 가상화

docker

  • 하드웨어 상에 베이스가 되는 호스트 OS를 설치하고, 호스트 OS에 가상화 소프트웨어를 설치한 후, 이를 가상화 소프트웨어 상에서 게스트 OS를 동작하는 방식
  • 컨테이너와 다르게 호스트 OS 상에서 다른 게스트 OS를 움직이고 있기 때문에 오버헤드가 커진다.
  • 오버헤드란 가상화를 수행하기 위해 필요한 CPU 자원, 디스크 용량, 메모리 사용량 등을 이야기 한다.
  • EX) ‘Oracle VM virtualBox’, ‘VMware Workstation Player’

하이퍼바이저 서버 가상화

docker

  • 하드웨어 상에 가상화를 전문으로 수행하는 소프트웨어인 ‘하이퍼바이저’를 배치하고, 하드웨어와 가상환경을 제어
  • 호스트 OS 없이 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있다.
  • 가상 환경마다 별도의 OS가 작동하므로 가상 환경의 시작에 걸리는 오버헤드가 커진다.
  • EX) ‘Microsoft Windows Server의 Hyper-V’, ‘Citrix사의 XenServer’ 등

Docker의 개요

  • docker는 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운용하기 위한 오픈소스 플랫폼
  • 컨테이너 기술을 사용하는 것이 특징

프로그래머에게 Docker란?

docker

  • 프로그래머는 Docker를 사용하여 개발한 애플리케이션의 실행에 필요한 모든 것이 포함되어 있는 Docker 이미지를 작성합니다.
  • 이 이미지는 컨테이너의 바탕이 되고, 이렇게 작성한 이미지를 바탕으로 컨테이너를 가동시킨다.
  • 이 이미지는 Docker가 설치되어 있는 환경이라면 기본적으로 어디서든지 작동되므로 ‘개발/테스트 환경에서는 움직이지만 제품 환경에서는 움직이지 않는다’는 리스크를 줄일 수 있다.

Docker의 기능

  • 1) Docker 이미지를 만드는 기능(Build)
  • 2) Docker 이미지를 공유하는 기능(Ship)
  • 3) Docker 컨테이너를 작동시키는 기능(Run)

Docker 이미지를 만드는 기능

  • 애플리케이션 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아서 Docker 이미지를 만든다.
  • Docker에서는 하나의 이미지에는 하나의 애플리케이션만 넣어 두고, 여러 개의 컨테이너를 조합하여 서비스를 구축한다는 방법을 권장
  • Docker 이미지의 정체는 애플리케이션의 실행에 필요한 파일들이 저장된 디렉토리
  • Docker 이미지는 Docker 명령을 사용하여 수동으로 만들 수도 있으며, Dockerfile이라는 설정 파일을 만들어 그것을 바탕으로 자동으로 이미지를 만들수도 있다.
  • 지속적인 인티그레이션(integration)과 지속적 딜리버리의 관점에서 코드에 의한 인프라의 구성 관리를 생각하면 Dockerfile을 사용하여 관리하는 것이 바람직하다.

Docker 이미지를 공유하는 기능

  • Docker 이미지는 Docker 레지스트리에서 공유할 수 있다.
  • 베이스 이미지에 미들웨어나 라이브러리, 전개할 애플리케이션 등을 넣은 이미지를 겹쳐서 독자적인 Docker 이미지를 만들어 가는 것
  • 공식 이미지 외에도 개인이 작성한 이미지를 Docker hub에서 자유롭게 공개하여 공유할 수 있다.
  • 또한 Docker Hub는 Github나 Bitbucket와 연계할 수도 있다. 예를 들어, Github 상에서 Dockerfile을 관리하고, 거기서 Docker 이미지를 자동으로 생성하여 Docker Hub에서 공개하는 것도 가능. 이러한 자동 생성 기능을 Automated Build 라고 한다.

Docker 컨테이너를 작동시키는 기능

  • Docker 이미지만 있으면 Docker가 설치된 환경이라면 어디서든지 컨테이너를 작동시킬 수 있다. 또한 Docker 이미지를 가지고 여러 개의 컨테이너를 가동시킬 수도 있다.

태그:

카테고리:

업데이트:

댓글남기기