도커 ( Docker )

Docker 공식 로고


 

 Docker  

  • 컨테이너 기반의 오픈소스 가상화 플랫폼
  • Linux 응용 프로그램들을 소프트웨어 컨테이너 안에 자동 배치시키는 오픈소스 프로젝트
  • 2013년 3월  Pycon Conference에서 dotCloud 창업자 Solomon Hykes가 <The Future of Linux Containers>라는 세션을 발표하면서 알려졌다.
  • Linux에서 운영 체제 수준 가상화의 추상화 및 자동화 계층 추가 제공
  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리 단순화
  • 기존의 가상화 및 반가상화 보다 경량화 된 방식

 

 

 Docker의 주요 개념 

 Container(≒ Process) 

  • 가상화 기술 중 하나로,  리눅스 커널 레벨에서 제공되는 격리된 공간 안에서 프로세스가 동작하는 기술
  • 기존 가상화 방식(예: Virtual Box/VMware)은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용
    • 사용법은 간단하지만 용량이 크고 무거워 운영환경에서 효율적으로 사용하기 부담되는 단점이 있다.
  • 컨테이너 간 독립적 실행이 가능
  • CPU/메모리 사용량 제한 가능 및 호스트의 특정 포트에 연결 또한 가능하며, 호스트의 특정 디렉토리를 내부 디렉토리처럼 사용도 가능

 

 

 Image(≒ 실행파일) 

  • Container 실행에 필요한 파일과 설정값 등을 담고 있는 것 (Program, Library, Source 등)
  • 상태 값이 없고, 불변한다는 특징이 있다 즉, 변경되는 값은 Image가 아닌 Image를 실행한 상태인 Container에 저장된다.
  • 하나의 Image로 여러 개의 컨테이너 생성이 가능
  • Image와 Container가 서로 종속되는 것이 아니기에 Container가 변경 및 삭제되어도 Image는 남아있다.

 

 

Registry (저장소)

  • Docker Image들이 저장되어 있는 일종의 저장소
  • 성격에 따라 Public Registry와 Private Registry로 구분
  • 대표적으로 Docker Hub가 많이 쓰이나, 사용자가 직접 만들어 관리할 수 있다.

 

 

 


이러한 특징을 이용해 새로운 서버가 추가되면 복잡하게 관리할 필요 없이

미리 만들어 놓은 이미지를 다운받고 컨테이너를 생성하면 된다.

물론 한 서버에 여러 Container를 실행할 수 있고 의존성 파일을 컴파일 및 설치하지 않아도 된다.


 

Docker Architecture

 

 Layer 저장방식 

  • Docker Image의 대용량으로 인한 반복 다운 시 발생하는 메모리 비효율 문제를 해결하기 위한 방식

 

  • 유니온 파일 시스템으로 여러 개의 Layer를 하나의 파일 시스템으로 사용할 수 있게 한다.

 

  • Image는 여러 개의 읽기 전용 Layer로 구성
    • 파일 추가 또는 수정시 새로운 Layer 생성

 

  • Container 생성 시에도 기존의 Image Layer 위에 읽기/쓰기 Layer를 추가하여 변경 내용은 추가된 Layer에 저장한다.
    • 따라서 여러 개의 Container가 생성되어도 최소한의 용량만 사용할 수 있게 된다.

 

 

 

 Docker의 장점 


Docker는 Container / Overlay Network / Union File System 등 이미 존재하는 기술을

획기적으로 조합하여 만들어진 플랫폼이다.

많은 사용자들이 이용하는 장점 중 몇 가지를 꼽자면 다음과 같다.


Rapid Application Deployment

  • CPU/메모리를 프로세스에서 요구되는 수준만큼만 사용하므로 성능 손실도 적고 VM 보다 무겁지 않아 App 설치 시간이 매우 짧고 하나의 서버에 여러 개의 컨테이너를 실행해도 서로 영향을 미치지 않기 때문에 실행 속도가 빠른 편이다.

 

Portability Across Machines

  • Application과 설치 이미지 파일이 하나의 컨테이너 안에 존재하기에 호스트 커널 및 플랫폼 버전과 무관하게 사용이 가능하므로 이식성이 뛰어나다고 볼 수 있다.

 

Version Control / Componet Reuse

  • 컨테이너의 Version 제어가 용이하고, 변경 내역 확인 및 Roll-Back이 간단하다.
  • Layer 저장 방식으로 컴포넌트를 재사용하여 용량 부담없이 Docker를 사용 가능하다.

 

Simplified Maintenance

  • 독립적으로 Container를 실행하고 호스트 CPU 등의 자원도 최소한으로 사용하기 때문에 종속성에 관한 문제에 있어 비교적 유지관리가 쉽다.

 

 

 

 

이제 Virtual Box 돌리기 시작했는데 Docker로 갈아타야 하는 것인가.....

최근 들어 느끼는 점이지만, 최신 기술의 동향에 비해 많이 뒤처져 있다는 생각이 든다.

신문이라도 봐야 하나..

 

참고 : 

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

https://www.leafcats.com/146