3.1 Docker Engine
Docker Engine — Docker의 "엔진", 즉 컨테이너 작동을 보장하는 핵심 소프트웨어야. 이 엔진은 격리된 컨테이너에서 애플리케이션을 개발, 배포, 실행할 수 있는 플랫폼을 제공해. Docker Engine에는 Docker의 모든 기능을 가능하게 해주는 몇 가지 핵심 구성 요소들이 포함되어 있어.
Docker Engine은 세 가지 주요 부분으로 구성돼:
- Docker Daemon: 서버 프로세스야. 컨테이너 관련 주요 작업을 수행해.
- Docker API: Docker Daemon과 프로그램 호출을 통해 상호작용할 수 있게 해주는 인터페이스야.
- Docker CLI: 커맨드 라인 인터페이스, Docker를 다루기 위한 인터페이스야.
Docker Engine의 역할:
Docker Engine은 컨테이너의 라이프사이클(생성, 실행부터 삭제까지)을 관리해. 컨테이너를 격리시켜서 하나의 호스트에서 여러 컨테이너를 충돌 없이 실행하도록 해 줘. Docker Engine은 복잡한 애플리케이션과 마이크로서비스를 컨테이너로 실행 가능하게 만들어서 개발, 테스트, 배포를 간소화해줘
.
Docker Engine의 진화
처음 등장한 이후로 Docker Engine은 여러 버전과 개선을 거쳤어. 새로운 업데이트마다 새로운 기능과 성능 개선이 이뤄졌지. 예를 들면, 컨테이너 오케스트레이션을 돕는 Docker Swarm 같은 기능들이 추가되었어. 이런 기능들은 컨테이너 클러스터를 관리하고 애플리케이션 배포를 자동화할 수 있게 해줬지.
3.2 Docker Daemon
Docker Daemon — Docker의 모든 작업을 수행하는 주요 서버 프로세스야. 백그라운드에서 실행되며 컨테이너, 이미지, 네트워크 및 기타 Docker 리소스를 관리하는 역할을 해.
Docker Daemon의 기능:
- 컨테이너 생성 및 관리: Docker Daemon은 컨테이너를 생성, 실행, 중지 및 삭제 요청을 처리해. 컨테이너의 격리와 리소스 분배를 담당하지.
- 이미지 작업: Docker Daemon은 컨테이너 생성을 위해 사용되는 이미지들을 다운로드하고 저장해. 또한 디스크 공간 사용을 최적화하기 위해 이미지 캐시도 관리해.
- 네트워크 관리: Docker Daemon은 컨테이너들끼리 그리고 외부 시스템과 상호작용할 수 있는 Docker 네트워크를 생성하고 관리해. 유연성과 보안을 위해 다양한 네트워크 드라이버와 설정을 지원해.
- 스토리지 관리: Docker Daemon은 데이터 저장을 위한 컨테이너들이 사용하는 볼륨이나 기타 스토리지 유형을 관리해. 컨테이너 내부 데이터의 신뢰성 있고 효율적인 관리를 제공해.
Docker Daemon의 아키텍처
Docker Daemon은 클라이언트-서버 아키텍처를 사용해. 클라이언트(CLI 혹은 API)는 Docker Daemon에게 명령을 보내고, Daemon은 이를 처리하고 실행해. Daemon은 Linux, MacOS 또는 Windows 같은 다양한 운영체제에서 실행돼.
보안 역할:
Docker Daemon은 컨테이너 보안을 보장하는 데 중요한 역할을 해. 접근 권한, 네트워크 설정 및 컨테이너 격리를 관리하여 잠재적인 위협과 취약점을 제한할 수 있지. namespaces(프로세스 및 리소스 격리 기술)와 cgroups(리소스 관리 메커니즘)을 사용하여 Docker Daemon은 컨테이너의 프로세스를 격리하고 리소스 사용을 제어하며 안전하게 작동되도록 보장해.
3.3 Docker API
Docker API — 이건 개발자랑 시스템 관리자들이 코드 통해 Docker를 관리할 수 있게 해주는 프로그래밍 인터페이스야. 이건 RESTful (Representational State Transfer)라는 아키텍처 스타일 원칙으로 작동하거든. 여기서 상호작용은 GET, POST, DELETE 같은 표준 HTTP 요청들을 통해 이루어져. 이렇게 하면 컨테이너 관련 작업을 쉽게 자동화하고 Docker를 다른 시스템이나 툴에 통합하는 게 가능해져.
Docker API의 기능:
- 컨테이너 관리: Docker API를 사용해서 컨테이너를 생성, 실행, 중지, 삭제할 수 있고, 그 상태랑 로그 정보도 얻을 수 있어.
- 이미지 작업: API로 컨테이너 이미지를 로드, 생성, 삭제 및 관리할 수 있어.
- 네트워크 작업: API는 Docker 네트워크 생성 및 관리, 그리고 네트워크에 컨테이너 연결 및 연결 해제를 지원해.
- 스토리지 관리: API는 데이터 저장을 위해 컨테이너에서 사용하는 볼륨 및 기타 스토리지를 관리할 수 있는 기능을 제공해.
Docker API 사용법:
Docker API는 Python, Go, Java 같은 프로그래밍 언어나 자동화 툴들과 함께 사용할 수 있어. 이렇게 하면 컨테이너 기반 애플리케이션 개발, 테스트 및 배포 프로세스를 자동화하는 스크립트나 애플리케이션을 만들 수 있어.
Docker API의 사용 사례들:
- CI/CD: 코드에 변경 사항 있을 때마다 자동으로 새로운 컨테이너를 생성하고 그것을 테스트하는 지속적 통합 및 배포 프로세스 자동화.
- 모니터링 및 로깅: 컨테이너 상태를 확인하고 성능을 분석하기 위해 모니터링 시스템 및 로깅 시스템과의 통합.
- 오케스트레이션: Docker Swarm이나 Kubernetes 같은 툴을 이용해서 Docker API로 개별 노드랑 컨테이너와 상호작용하며 컨테이너 클러스터를 관리하기.
3.4 Docker CLI
Docker CLI (Command Line Interface) — 이건 커맨드 라인 인터페이스로, 사용자가 Docker Daemon과 상호작용하고 컨테이너와 관련된 다양한 작업을 수행할 수 있도록 해줘. Docker CLI는 터미널을 통해 Docker를 관리하는 편리하고 직관적인 방법을 제공해.
Docker CLI의 주요 명령어:
Docker CLI는 컨테이너, 이미지, 네트워크, 저장소와 관련된 모든 주요 작업을 수행할 수 있는 다양한 명령어를 지원해. 그중 몇 가지 예시는 다음과 같아:
- docker run: 이미지를 기반으로 새로운 컨테이너를 실행.
- docker build: Dockerfile에서 새로운 이미지를 생성.
- docker pull: Docker Hub 또는 다른 레지스트리에서 이미지를 다운로드.
- docker push: 로컬 이미지를 레지스트리에 업로드.
- docker ps: 실행 중인 컨테이너 목록 보기.
- docker stop: 실행 중인 컨테이너 중지.
- docker rm: 중지된 컨테이너 삭제.
- docker network: Docker 네트워크 관리.
Docker CLI의 특징:
- 사용 편의성: Docker CLI는 직관적이고 사용하기 쉽게 설계되었어. 명령어는 간단하고 논리적 구조를 가지고 있어서 초보자도 쉽게 사용할 수 있어.
- 스크립트 및 자동화: Docker CLI는 컨테이너 관련 작업을 자동화하는 스크립트를 작성할 수 있어. 이는 대규모 컨테이너 클러스터를 관리하기 쉽게 해주고, Docker를 다른 도구 및 시스템과 통합할 수 있게 해줘.
- 확장성: Docker CLI는 새로운 명령어를 추가할 수 있는 플러그인을 지원해. 이를 통해 Docker CLI를 다양한 요구사항과 사용 시나리오에 맞게 유연하게 조정할 수 있어.
컴포넌트 간의 상호작용:
Docker CLI는 Docker Daemon과 Docker API를 통해 상호작용해. 사용자가 Docker CLI에 명령어를 입력하면, 이 명령어는 Docker Daemon에서 처리되며 적절한 작업이 수행된 후 결과가 CLI로 반환돼. 이 상호작용은 컨테이너와 Docker 리소스를 관리하는 강력하고 유연한 방법을 제공해.
Docker CLI 사용 예시:
- 개발: 개발자는 Docker CLI를 사용해 빠르게 독립된 개발 및 테스트 환경을 만들 수 있어. 이를 통해 라이브러리 및 프레임워크의 다양한 버전 간에 쉽게 전환할 수 있어.
- 배포: 관리자는 Docker CLI를 사용해 애플리케이션을 서버와 클라우드 환경에 자동으로 배포할 수 있어. 이는 프로세스의 안정성과 예측 가능성을 보장해.
- 디버깅 및 모니터링: Docker CLI를 통해 컨테이너 로그에 쉽게 접근하고, 상태를 확인하며 애플리케이션 디버깅을 수행할 수 있어.

Docker Engine, Docker Daemon, Docker API, Docker CLI는 Docker 생태계에서 컨테이너의 기능과 관리를 제공하는 주요 컴포넌트들이야. Docker Engine은 시스템의 핵심으로, Docker Daemon과 Docker API를 포함하고 있어. Docker Daemon은 컨테이너 생성 및 관리 작업을 수행하고, Docker API는 Daemon과 상호작용하기 위한 프로그래밍 인터페이스를 제공하며, Docker CLI는 다양한 명령어를 실행하기 위한 편리한 인터페이스를 제공해.
GO TO FULL VERSION