도커(Docker)
도커(Docker)는 리눅스 컨테이너(Container) 기반의 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 오픈소스 가상화 플랫폼입니다.
도커(Docker)는 소프트웨어를 컨테이너(Container)라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.
컨테이너(Container)
컨테이너(Container)는 가상 머신(Virtual Machine)과 마찬가지로 애플리케이션이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행될 수 있도록 코드와 모든 종속성을 패키징 하는 표준 소프트웨어 단위이며 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술을 말합니다.
가상 머신(Virtual Machine)과 컨테이너(Container)
가상 머신(VM : Virtual Machine)
가상 머신(Virual Machine)은 가상 머신 모터 또는 하이퍼바이저(Hypervisor)라 불리는 가상 머신(VM)을 생성하고 구동하는 소프트웨어를 통해 여러개의 운영체제(Guest OS)를 하나의 호스트에서 생성하여 사용하는 방식입니다.
여기서 운영체제는 가상 머신(VM)이라는 단위로 구분되고, 여러 운영체제가 설치되어 사용되기 때문에 이러한 여러 운영체제를 Guest OS라고 부릅니다. 가상 머신(VM)은 독립된 공간과 시스템 자원을 할당받아 사용합니다.
가상 머신(VM : Virtual Machine) VS 컨테이너(Container)
가상 머신(VM)은 하이퍼바이저를 거쳐 각각의 독립된 OS를 만들기 때문에 용량이 크며 오버헤드가 큽니다.
반면 컨테이너(Container)는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, namespace, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능의 손실이 거의 없습니다. 컨테이너에 필요한 커널을 공유해서 사용하고, 컨테이너 안에는 어플리케이션을 구동하는데 필요한 라이브러리 및 실행파일만 존재하기 때문에 컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어듭니다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상 머신에 비해 빠르며, 가상화된 공간을 사용할때의 성능 손실도 거의 없습니다.
도커(Docker)의 구성요소
도커 데몬(Docker Daemon)
- Docker API 요청을 수신하고, 이미지, 컨테이너 등 Docker 객체 관리
- 다른 데몬과 통신하여 도커 서비스 관리 기능
도커 클라이언트(Docker Client)
- 사용자가 도커와 상호작용하는 기본 방법(Docker API)
- 둘 이상의 데몬과 통신 가능
도커 레지스트리(Docker Registry)
- 도커 이미지를 저장, 도커 Hub는 누구나 사용할 수 있는 공개형 레지스트리
도커 허브(Docker Hub)
- SaaS 기반의 클라우드 서비스로 도커 이미지 공유 가능
도커 객체(Docker Object)
- 이미지, 컨테이너, 네트워크, 볼륨 등에 관한 객체
도커 이미지(Docker Image)
- 구동에 필요한 프로그램과 라이브러리, 소스코드를 패키징한 파일
컨테이너(Container)
- 이미지를 배포하여 실행한 상태, 단일 이미지를 다수 컨테이너에서 구동 가능
도커(Docker)의 핵심 개념
도커 파일(Docker file)
도커 파일(Docker file)은 도커 이미지를 생성하기 위한 일종의 설정파일입니다.
여러가지 설정을 위한 명령어를 사용하여 Docker file을 작성 후 빌드(Build)를 하게되면 작성된 내용을 기반으로 Docker image를 만들수 있습니다.
도커 이미지(Docker Image)
도커 이미지(Docker Image)는 소스코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일입니다. 다시 말해, 특정 프로세스를 실행하기 위한(도커 컨테이너 생성 및 실행) 모든 파일과 설정값을 지닌 것으로, 더 이상의 의존성 파일을 컴파일 하거나 이것저것 설치할 필요 없는 상태의 파일을 의미합니다. 예를 들어 우분투(Ubuntu) 도커 이미지는 우분투를 실행하기 위한 모든 파일과 설정들을 가지고 있으며, 오라클(Oracle) 도커 이미지는 오라클을 실행하기 위한 모든 파일과 설정들을 가지고 있습니다.
도커 컨테이너(Docker Container)
도커 컨테이너(Docker Container)는 도커 이미지(Docker Image)를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 또는 캡슐화 하여 격리된 공간에서 프로세스를 동작 시키는 기술입니다.