도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트입니다.
컨테이너는 어플리케이션 실행 코드와 모든 의존성을 포함한 소프트웨어 패키지 유닛입니다. 컨테이너를 활용하여 하나의 컴퓨팅 환경에서 다른 환경으로 빠르고, 안정적으로 어플리케이션을 실행할 수 있습니다.
도커 컨테이너 이미지는 다음과 같은 특징을 지닙니다.
컨테이너 이미지는 도커 엔진에서 실행되는 런타임에 컨테이너가 됩니다. 컨테이너화된 소프트웨어는 인프라 구조에 관계없이 항상 동일하게 실행됩니다. 이 덕분에 실행중인 환경에 관계없이 어플리케이션이 언제나 동일하게 실행될 것을 보장합니다.
도커 컨테이너 | 가상 머신 Virtual Machine |
---|---|
한 컴퓨터에서 여러 개의 컨테이너를 OS 커널을 공유하여 실행할 수 있습니다. 각 컨테이너는 사용자의 메모리에서 독립적으로 실행되며 VM과 비교하여 더 적은 메모리만을 차지합니다. | 여러 VM이 독립적으로 실행되지만, 각 VM마다 해당 어플리케이션을 실행하기 위한 OS를 포함해야 하므로 컨테이너보다 많은 메모리를 차지하고, 배포가 무겁고 부팅이 더 오래 걸릴 수 있습니다. |
서버를 부팅할 때 실행되는 운영체제를 '호스트 OS'라고 부릅니다. 도커 컨테이너는 호스트 OS 위에서 실행되는 격리된 공간으로, 컨테이너 내부에서 소프트웨어를 설치하고 설정 파일을 수정하더라도 호스트 OS에 영향을 끼치지 않습니다. 또한, 도커 이미지는 커널을 포함하지 않기 때문에 이미지 크기가 가상 머신에 비해 굉장히 작습니다. 이미지 내용을 레이어 단위로 구성하며 중복되는 레이어를 재사용할 수 있어서 애플리케이션 배포 속도가 매우 빠릅니다.
도커는 서비스에 필요한 여러 모듈을 독립된 형태로 구성하는 마이크로서비스 구조를 구현하기에 적합합니다. 예를 들어 웹 서비스는 데이터베이스 컨테이너와 웹 서버 컨테이너로 분리할 수 있고, 웹 서비스에 부하가 발생하면 웹 서버 컨테이너만을 동적으로 늘려 부하를 분산할 수 있습니다. 이러한 자동화는 일반적으로 도커 스웜 모드, 쿠버네티스 등의 컨테이너 오케스트레이션 플랫폼을 통해 이루어집니다.
What is Kubernetes?
쿠버네티스 간단 소개
쿠버네티스는 컨테이너화된 워크로드(containerized workload)를 관리하기 위한 '컨테이너 오케스트레이션' 플랫폼입니다.
수많은 컨테이너들을 관리할 때 필요한 아래 작업들을 안정적으로 자동화하는 것을 말합니다.
쿠버네티스는 다음 기능들을 제공합니다.