# Docker

# Docker란 무엇인가?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

여기서 컨테이너는 여러가지 프로그램이나 실행환경을 넣어서 전달할 수 있게 해준다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐 등 어떠한 프로그램이라도 컨테이너로 추상화 해서 관리할 수 있다.

  • 컨테이너 기술을 지원하는 다양한 프로젝트 중 하나이다.
  • 이전에도 컨테이너 기술이 있었지만 도커로 인해서 컨테이너 기술이 알려지게 되었다.
  • 도커는 컨테이너 기술의 사실상 표준이다.
  • 가장 인기있는 클라우드 오픈소스 2위이다.(2014, 리눅스제단발표)
  • 다양한 운영체제에서 사용 가능하다.(리눅스, 윈도우, Mac)
  • 애플리케이션에 국한되지 않고 의존성 및 파일 시스템까지 패키징하여 빌드, 배포, 실행을 단순화한다.
  • 리눅스의 Name space와 cgroups와 같은 커널 기능을 사용하여 가상화 한다.

Docker

  • 도커는 다양한 클라우드 서비스 모델과 같이 사용 가능하다.
    • 이미지: 필요한 프로그램과 라이브러리, 소스를 설치한 뒤 만든 하나의 파일
    • 컨테이너: 이미지를 격리하여 독립된 공간에서 실행한 가상환경

# 컨테이너가 해결한다.

  • 동일 시스템에서 실행하는 소프트웨어의 컴포넌트가 충돌하거나 다양한 종속성을 가지고 있음
  • 컨테이너는 가상머신을 사용해 각 **마이크로 서비스를 격리(Isolate)**하는 기술
  • 컨텐이너는 가상머신처럼 하드웨어를 전부 구현하지 않기 때문에 매우 빠른 실행 가능
  • 프로세스의 문제가 발생할 경우 컨테이너 전체를 조정해야 하기 때문에 컨테이너에 하나의 프로세스를 실행하도록 하는 것이 좋다.

# 왜 컨테이너를 써야할까?

컨테이너는 애플리케이션을 환경에 구애받지 않고 실행하는 기술이다. 일례로 깃랩이라는 도구를 우분투에 설치하려면 복잡한 프로세스를 거쳐야 한다. 그러나 컨테이너 도구인 도커를 사용하면 어느 환경이든 상관 없이 간단한 명령어를 통해서 깃랩을 실행할 수 있다. (복잡한 설치 과정을 겪지 않는다.)