도커(Docker)란?
도커는 애플리케이션을 컨테이너라는 독립된 공간에서 실행하고 관리하는 데 사용되는 오픈소스 플랫폼
1. 탄생 배경 및 원인
| 원인 | 해결책 | 등장 |
| 개발/배포 환경 불일치로 인한 오류 및 의존성 재설치 문제 | ➡️ VM(Virtual Machine)으로 환경 격리 | ❌ VM의 문제: 실행이 느리고 OS 전체 포함으로 자원 낭비 심함 |
| ➡️ 컨테이너 기술 표준화 | ✅ 도커(Docker): 컨테이너 기술을 표준화한 도구 및 플랫폼 |
2. 도커의 핵심 제공 기능
- 환경 독립성 보장: '도커 이미지'라는 패키지에 애플리케이션과 모든 종속성을 담아, 어떤 호스트 환경에서도 동일하게 동작합니다.
- 경량화 및 고속 동작: VM과 달리 호스트 OS의 커널을 공유합니다. 덕분에 컨테이너는 매우 가볍고 시작 속도가 빠릅니다.
도커의 핵심 구성 요소
1. 도커 이미지 (Docker Image)
- 정의: 컨테이너 생성을 위한 읽기 전용 템플릿이자 정적인 패키지입니다.
- 특징: 계층적 구조(Layer)를 가지며, 변경 시 변경 사항이 있는 레이어만 교체하여 효율적입니다.
- 생성: Dockerfile이라는 설정 파일을 통해 빌드합니다.
2. 도커 컨테이너 (Docker Container)
- 정의: 도커 이미지를 기반으로 실행되는 독립적인 실행 환경입니다.
- 특징: 실행 시 쓰기 가능 계층이 추가되어 데이터를 변경할 수 있지만, 컨테이너 삭제 시 해당 데이터는 기본적으로 사라집니다.
3. 도커 엔진 (Docker Engine)
도커 플랫폼의 핵심 프로세스로 세 가지로 구성됩니다.
- CLI: 사용자가 명령을 입력하는 터미널 창.
- Docker Daemon: 실제 이미지 빌드와 컨테이너 관리를 수행하는 서버.
- REST API: CLI와 데몬 사이의 통신 인터페이스.
4. 도커 레지스트리 (Docker Registry)
도커 이미지를 저장하고 공유하는 저장소입니다.
- Docker Hub: 누구나 사용할 수 있는 공용 저장소.
- Private Registry: 기업 내부용 사설 저장소.
Dockerfile
도커 이미지 빌드 시, 사용하는 파일이며 패키지 설치, 환경 설정, 실행 명령 등을 명시하여 실행환경을 자동화하는 설정 파일
네트워크 및 저장소 관리
1. 도커 네트워크
| 네트워크 유형 | 설명 | 특징 |
| Bridge | - 컨테이너들이 가상 스위치에 연결됨 - 사설 네트워크로 연결 |
기본 모드, 포트 포워딩 필수 |
| Host | 호스트의 네트워크를 그대로 사용 | 가장 빠름, 격리성 없음 |
| Overlay | 여러 호스트 간 컨테이너 통신 | 클러스터(Swarm) 환경용 |
2. 데이터 영속성 (Storage)
| 관리 방식 | 설명 | 주요 용도 |
| Volume | 도커가 직접 관리하는 저장 영역 | 영구 데이터 저장, 공유 용이 |
| Bind Mount | 호스트 경로를 직접 연결 | 개발 단계 소스 코드 동기화 |
| Storage Driver | 이미지 레이어 및 파일시스템 관리 | Overlay2 등 시스템 매커니즘 |
도커 클러스터링 및 오케스트레이션
여러 개의 컨테이너가 관계적으로 움직이는 환경을 관리하는 방법입니다.
1. 도커 컴포즈 (Docker Compose)
- 정의: 여러 개의 컨테이너(예: Web 서버 + DB + Redis)를 하나의 YAML 파일로 정의하고, 단 한 번의 명령으로 전체 서비스를 실행/관리하는 도구입니다.
- 주요 용도: 주로 로컬 개발 환경이나 단일 호스트에서의 테스트 및 개발 시 사용됩니다.
- 특징: 복잡한 docker run 명령어를 일일이 입력할 필요 없이 파일 하나로 인프라를 코드화(IaC)할 수 있습니다.
2. 컨테이너 오케스트레이션 (Container Orchestration)
- 정의: 수많은 컨테이너의 배포, 확장(Scaling), 로드 밸런싱, 장애 복구(Self-healing) 등을 자동화하는 기술입니다.
- 주요 용도: 대규모 트래픽이 발생하는 운영(Production) 환경이나 MSA(Microservices Architecture) 구조에서 필수적입니다.
- 주요 기능:
- 스케줄링: 어느 서버에 컨테이너를 배치할지 결정
- 오토 스케일링: 트래픽에 따라 컨테이너 수 조절
- 서비스 디스커버리: 컨테이너 간의 통신 경로 자동 설정
- 대표 도구
- 쿠버네티스(Kubernetes): 가장 널리 사용되는 컨테이너 오케스트레이션 도구이며 고가용성과 환경 일관성을 제공한다.
- Amazon ECS (Elastic Container Service): 아마존 환경에 적합한 컨테이너 오케스트레이션 도구 AWS의 서비스들과의 통합성이 좋은 것이 장점.
- Docker Swarm: 도커에서 기본 제공하는 비교적 단순한 오케스트레이션 도구.
요약 비교
| 구분 | 도커 컴포즈 | 오케스트레이션 (K8s 등) |
| 관리 대상 | 단일 호스트 내 여러 컨테이너 | 여러 호스트(클러스터) 내 컨테이너 |
| 주요 목적 | 개발 및 테스트 환경 구축 | 실제 서비스 운영 및 자동화 |
| 확장성 | 수동 확장 위주 | 자동 확장(Auto-scaling) 지원 |
'Cloud Native > Docker' 카테고리의 다른 글
| Docker 명령어: network (0) | 2026.02.23 |
|---|---|
| Docker 명령어: compose (0) | 2026.02.23 |
| Docker 명령어: container (0) | 2026.02.23 |
| Docker 명령어: image (0) | 2026.02.23 |
| Docker 명령어: info (0) | 2026.02.23 |