🚀 도커란 무엇인가?
도커(Docker)는 애플리케이션을 컨테이너로 패키징하는 오픈소스 플랫폼입니다. 기존 가상 머신(VM)과 달리 OS 커널을 공유해 가볍고 빠르며, “어디서나 동일한 실행 환경” 을 보장합니다.
🔍 핵심 기능 구조화 분석
1️⃣ 도커 이미지 (Docker Image)
- 정의: 실행 환경을 패키징한 읽기 전용 템플릿
- 특징:
- 레이어 구조로 구성되어 효율적인 저장 공간 활용
Dockerfile
로 정의 → 재현성 보장- 예시:
nginx:latest
,python:3.9-slim
실제 사용 예시:
# Dockerfile 예시
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3
COPY app.py /app/
CMD ["python3", "/app/app.py"]
> docker build -t my-python-app .
→ 이미지 생성
2️⃣ 도커 컨테이너 (Docker Container)
- 정의: 이미지를 실행한 격리된 프로세스
- 특징:
- 초단위 시작/중지 ⏱️
- 호스트 OS와 자원 격리되지만 성능 손실 없음
docker run
명령어로 생성
실행 예시:
docker run -d --name web-server -p 8080:80 nginx:alpine
> 호스트의 8080 포트 ⇄ 컨테이너의 80 포트 연결
3️⃣ 도커 네트워크 (Docker Networking)
- 기능: 컨테이너 간 통신 관리
- 네트워크 드라이버 유형:
bridge
(기본): 가상 네트워크 인터페이스 생성host
: 호스트 네트워크 직접 사용overlay
: 멀티 호스트 클러스터 연결
예시:
docker network create my-network
docker run -d --net my-network --name app1 my-app
docker run -d --net my-network --name app2 my-app
> app1
과 app2
는 서로 통신 가능
4️⃣ 도커 볼륨 (Docker Volumes)
- 목적: 컨테이너의 데이터 영속성 보장
- 유형:
- 볼륨: 도커가 관리하는 저장 공간 (
/var/lib/docker/volumes
) - 바인드 마운트: 호스트의 특정 경로 직접 연결
- tmpfs: 메모리 기반 임시 저장
- 볼륨: 도커가 관리하는 저장 공간 (
사용법:
docker volume create db-data
docker run -d -v db-data:/var/lib/mysql mysql:8.0
> 컨테이너 삭제 후에도 데이터 보존
5️⃣ 도커 컴포즈 (Docker Compose)
- 용도: 다중 컨테이너 애플리케이션 정의/실행
docker-compose.yml
파일로 서비스, 네트워크, 볼륨 한 번에 관리
예시 파일:
version: "3.8"
services:
web:
image: nginx:alpine
ports: ["80:80"]
db:
image: postgres:13
volumes: ["db-data:/var/lib/postgresql/data"]
volumes:
db-data:
> docker-compose up -d
로 전체 스택 실행
6️⃣ 도커 레지스트리 (Docker Registry)
- 역할: 도커 이미지 저장/공유 플랫폼
- Docker Hub: 공식 레지스트리 (예:
docker pull ubuntu
) - Private Registry 구축:
docker run -d -p 5000:5000 --name registry registry:2 docker tag my-app localhost:5000/my-app docker push localhost:5000/my-app
⚙️ 도커 아키텍처 핵심 요소
(출처: 공식 도커 문서)
- 도커 데몬(
dockerd
): 백그라운드 서비스 (이미지/컨테이너 관리) - 도커 클라이언트(
docker
): 사용자 명령어 처리 - 도커 오브젝트: 이미지, 컨테이너, 네트워크, 볼륨
🛠️ 실무 적용 시나리오
- 로컬 개발 환경 표준화
- 신규 팀원이
docker-compose up
한 방에 개발 환경 구축
- 신규 팀원이
- CI/CD 파이프라인
- Jenkins/GitLab CI에서 동일한 컨테이너로 빌드/테스트
- 마이크로서비스 배포
- 각 서비스를 컨테이너로 분리 → 확장성 향상
💡 도커 vs 전통적 가상화
항목 | 도커 컨테이너 | 가상 머신 (VM) |
---|---|---|
OS | 호스트 OS 커널 공유 | 게스트 OS 전체 실행 |
성능 | Near-Native | 오버헤드 발생 |
시작 시간 | 1~2초 | 1~5분 |
이미지 크기 | MB 단위 (경량) | GB 단위 |
✅ 결론: 왜 도커인가?
- 🚢 “배송 컨테이너” 같은 표준화
개발 → 테스트 → 프로덕션 환경 일관성 보장 - 📦 의존성 충돌 해결
Python 2.x/3.x, Node.js 버전 공존 가능 - ⚡ 리소스 효율성
물리 서버 1대에 수십 개 컨테이너 실행
> “도커는 애플리케이션의 이식성과 확장성을 근본적으로 바꿨습니다. 클라우드 네이티브 시대의 핵심 인프라로 자리매김한 이유가 명확합니다!”
초보자는 docker run hello-world
로 시작해보세요! 🐳 D