Container

Docker 를 이해하기 위해서는 Container에 대한 이해가 필요합니다. Container는 애플리케이션을 어떠한 환경이든 실행할 수 있도록 사용되는 라이브러리와 같은 필요한 모든 요소들을 하나의 패키지로 패키징하여 하나의 독립적인 프로세스로 격리시키는 기술을 의미합니다.

Benefit of Container

  1. 하드웨어 레벨에서 가상화되는 VM과 다르게 Containter는 OS 레벨에서 가상화되어 OS Kernel을 공유하기 때문에 VM 보다 훨씬 적은 메모리를 사용합니다.
  2. 애플리케이션을 실행하기 위한 모든 구성요소들을 하나로 패키지하여 제공되고, 실행환경에 구애받지 않기 때문에 이식성워크로드의 이동성이 보장됩니다.
  3. 개발자는 애플리케이션과 라이브러리와 같은 구성요소들에만 집중할 수 있고, 운영 팀은 배포에만 집중할 수 있기 때문에 책임 분리가 가능해집니다.

워크로드의 이동성은 작업이나 데이터가 다른 시스템, 플랫폼 또는 환경으로 자유롭게 이동할 수 있는 능력(이식성)을 말합니다. 보통 워크로드의 이동성은 가상화 기술, 컨테이너화된 환경 등을 통해 구현됩니다.

Docker

Docker는 앞서 언급한 컨테이너 기술을 기반으로한 오픈소스 가상화 플랫폼입니다. Docker를 통해 여러 컨테이너들을 관리할 수 있습니다.

위키백과에서는 도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트라고 설명하고 있습니다.

Docker 의 특징

Docker는 컨테이너 기술을 기반으로 하기 때문에 컨테이너의 이점과 많은 부분이 겹칩니다.

  1. 확장성 및 이식성
    • 도커가 설치되어있으면 어떤환경에서든 컨테이너를 실행할 수 있습니다.
    • 오픈소스이기 때문에 특정 서비스에 종속적이지 않습니다.
  2. 표준성
    • java, ruby, node, go, php 로 이루어진 애플리케이션의 배포방식은 모두 다릅니다. 하지만 도커를 통해 모든 서비스들의 배포과정이 표준화되어 간단해집니다.
  3. 이미지
    • 도커에서 컨테이너를 실행하기위해서는 Image 라는 파일이 필요합니다. Image 파일은 Dockerfile 을 이용하여 빌드할 수 있습니다. 또한, 빌드 기록이 남기 때문에 버전관리 또한 가능합니다.
    • 이미지 파일을 이미지 저장소인 Docker Hub에 저장하고, 운영서버에서 해당 이미지를 불러와 컨테이너를 실행할 수 있습니다.
  4. 설정파일
    • 설정을 환경변수 로 제어 및 관리합니다.
    • 컨테이너를 띄울 때 MYSQL_PASS=password 와 같은 환경변수를 지정할 수 있습니다.