Docker: Difference between revisions
Jump to navigation
Jump to search
(Phase 0.4: Expand Docker) |
|||
| (14 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
Docker | = Docker = | ||
{{Status | |||
|status=Draft | |||
|owner=Knowledge Agent | |||
|last_update=2026-07-15 | |||
|review=Pending | |||
}} | |||
{{TOC}} | |||
== Overview == | |||
Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 독립된 환경에 패키징하여 어디서든 일관되게 실행할 수 있게 합니다. | |||
=== Summary === | |||
* 무엇인가? — 컨테이너 기반 애플리케이션 가상화 플랫폼 | |||
* 왜 필요한가? — 환경 일관성, 빠른 배포, 리소스 효율성 | |||
* 언제 사용하는가? — 개발/테스트/운영 환경, 마이크로서비스, CI/CD | |||
== Purpose == | |||
이 문서가 존재하는 이유 | |||
* Goal: Docker 기본 개념부터 실전 명령어, 리소스 관리까지 한 곳에서 제공 | |||
* Scope: Docker 기본 명령어, 컨테이너 리소스 제한, Dockerfile, 이미지 관리 | |||
* Non-goals: Kubernetes 오케스트레이션, Docker Compose 고급 설정은 별도 문서 | |||
== Key Concepts == | |||
{| class="wikitable" | |||
! Concept | |||
! Description | |||
! Related | |||
|- | |||
| Container | |||
| 독립된 실행 환경 (OS 레벨 가상화) | |||
| [[Docker]] | |||
|- | |||
| Image | |||
| 컨테이너 생성을 위한 템플릿 | |||
| [[Docker command workflow]] | |||
|- | |||
| Dockerfile | |||
| 이미지 빌드 설정 파일 | |||
| [[Docker command workflow]] | |||
|- | |||
| Volume | |||
| 컨테이너 외부 저장소 마운트 | |||
| [[Docker library sharing]] | |||
|- | |||
| Resource Limit | |||
| CPU/메모리/디스크 사용량 제한 | |||
| [[Docker container resource]] | |||
|} | |||
== Architecture == | |||
Docker는 클라이언트-서버 아키텍처로 구성됩니다: | |||
<syntaxhighlight lang="mermaid"> | |||
graph TD | |||
A[Docker Client] --> B[Docker Daemon] | |||
B --> C[Container Runtime] | |||
B --> D[Image Store] | |||
B --> E[Network Manager] | |||
B --> F[Volume Manager] | |||
C --> G[Container 1] | |||
C --> H[Container 2] | |||
C --> I[Container N] | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Workflow == | |||
{| class="wikitable" | |||
! Stage | |||
! Input | |||
! Output | |||
|- | |||
| Build | |||
| Dockerfile | |||
| Docker Image | |||
|- | |||
| Run | |||
| Docker Image | |||
| Running Container | |||
|- | |||
| Push | |||
| Docker Image | |||
| Registry Upload | |||
|- | |||
| Pull | |||
| Registry | |||
| Docker Image Download | |||
|} | |||
== Detailed Explanation == | |||
=== Docker 기본 === | |||
Docker는 [[Linux]] 컨테이너(LXC)를 기반으로 합니다. 호스트 커널을 공유하면서 격리된 환경을 제공합니다. | |||
=== Docker 명령어 워크플로우 === | |||
Dockerfile 작성 → 이미지 빌드 → 컨테이너 실행 → 레지스트리 푸시 → 다른 시스템에서 풀/실행 | |||
== | === Docker 컨테이너 리소스 === | ||
== | 컨테이너는 기본적으로 CPU, 메모리, 디스크 사용량이 제한됩니다. --memory, --cpus 옵션으로 제한을 설정할 수 있습니다. | ||
=== Docker 라이브러리 공유 === | |||
볼륨(Volume)과 바인드 마운트를 통해 호스트와 컨테이너 간 파일을 공유합니다. | |||
== Configuration == | |||
<syntaxhighlight lang="bash"> | |||
# Docker 버전 확인 | |||
docker --version | |||
# 이미지 빌드 | |||
docker build -t myapp:latest . | |||
# 컨테이너 실행 | |||
docker run -d --name myapp --memory=2g --cpus=2 myapp:latest | |||
# 컨테이너 리소스 제한 | |||
docker run -d --memory=4g --memory-swap=4g --cpus=4 myapp:latest | |||
# 로그 확인 | |||
docker logs -f myapp | |||
# 컨테이너 상태 확인 | |||
docker ps -a | |||
docker stats | |||
</syntaxhighlight> | |||
== Examples == | |||
=== Example 1: Dockerfile 작성 === | |||
<syntaxhighlight lang="dockerfile"> | |||
FROM python:3.11-slim | |||
WORKDIR /app | |||
COPY requirements.txt . | |||
RUN pip install -r requirements.txt | |||
COPY . . | |||
CMD ["python", "app.py"] | |||
</syntaxhighlight> | |||
=== Example 2: 리소스 제한 컨테이너 실행 === | |||
<syntaxhighlight lang="bash"> | |||
docker run -d --name gpu-container --gpus all --memory=8g --cpus=4 --restart=unless-stopped myapp:latest | |||
</syntaxhighlight> | |||
== Best Practices == | |||
* 다단계 빌드(Docker multi-stage build) 활용 | |||
* .dockerignore 파일 작성 | |||
* 공식 이미지 기반 시작 | |||
* 불변 태그(immutable tag) 사용 | |||
* 컨테이너 로그 관리 설정 | |||
* 리소스 제한 필수 적용 | |||
== Limitations == | |||
* Linux 호스트 필요 (Windows/macOS는 VM 오버헤드) | |||
* 커널 기능 의존 (cgroups, namespaces) | |||
* 보안 격리는 호스트 커널 공유로 제한적 | |||
== References == | |||
* https://docs.docker.com/ | |||
* https://hub.docker.com/ | |||
* https://github.com/docker | |||
== Related Pages == | |||
* [[Docker command workflow]] | |||
* [[Docker container resource]] | |||
* [[Container tips and tricks]] | |||
* [[Dockerfile tips and tricks]] | |||
* [[Kubernetes]] | |||
[[Category:Network]] | |||
== Knowledge Graph == | |||
Related | |||
→ [[Kubernetes]] | |||
→ [[Container]] | |||
→ [[Dockerfile]] | |||
→ [[Docker Compose]] | |||
[[Category:Guide]] | |||
== GPU Docker == | |||
Docker에서 GPU 사용하려면 NVIDIA Container Toolkit 필요. | |||
<syntaxhighlight lang="bash"> | |||
# NVIDIA Container Toolkit 설치 | |||
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \ | |||
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo | |||
sudo yum install -y nvidia-container-toolkit | |||
sudo systemctl restart docker | |||
# GPU 컨테이너 실행 | |||
docker run --gpus all nvidia/cuda:12.2-base nvidia-smi | |||
# 특정 GPU만 사용 | |||
docker run --gpus 'device=0,1' nvidia/cuda:12.2-base nvidia-smi | |||
# GPU 메모리 제한 | |||
docker run --gpus 'device=0,reserved-memory=4096' nvidia/cuda:12.2-base | |||
</syntaxhighlight> | |||
== Docker Compose == | |||
Docker Compose는 멀티 컨테이너 애플리케이션 관리. | |||
<syntaxhighlight lang="yaml"> | |||
version: '3.8' | |||
services: | |||
app: | |||
image: myapp:latest | |||
deploy: | |||
resources: | |||
reservations: | |||
devices: | |||
- driver: nvidia | |||
count: 1 | |||
capabilities: [gpu] | |||
ports: | |||
- "8080:8080" | |||
volumes: | |||
- ./data:/app/data | |||
restart: unless-stopped | |||
redis: | |||
image: redis:7-alpine | |||
ports: | |||
- "6379:6379" | |||
volumes: | |||
- redis-data:/data | |||
volumes: | |||
redis-data: | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="bash"> | |||
# Compose 실행 | |||
docker compose up -d | |||
# 로그 확인 | |||
docker compose logs -f app | |||
# 서비스 재시작 | |||
docker compose restart app | |||
</syntaxhighlight> | |||
== Docker Swarm == | |||
Docker Swarm은 Docker 네이티브 오케스트레이션. | |||
<syntaxhighlight lang="bash"> | |||
# Swarm 초기화 | |||
docker swarm init --advertise-addr eth0 | |||
# 서비스 배포 | |||
docker service create --name myapp --replicas 3 -p 8080:80 myapp:latest | |||
# 서비스 상태 확인 | |||
docker service ls | |||
docker service ps myapp | |||
# 스케일링 | |||
docker service scale myapp=5 | |||
</syntaxhighlight> | |||
Latest revision as of 13:37, 17 July 2026
Docker
Overview
Docker는 컨테이너 기반의 가상화 플랫폼으로, 애플리케이션을 독립된 환경에 패키징하여 어디서든 일관되게 실행할 수 있게 합니다.
Summary
- 무엇인가? — 컨테이너 기반 애플리케이션 가상화 플랫폼
- 왜 필요한가? — 환경 일관성, 빠른 배포, 리소스 효율성
- 언제 사용하는가? — 개발/테스트/운영 환경, 마이크로서비스, CI/CD
Purpose
이 문서가 존재하는 이유
- Goal: Docker 기본 개념부터 실전 명령어, 리소스 관리까지 한 곳에서 제공
- Scope: Docker 기본 명령어, 컨테이너 리소스 제한, Dockerfile, 이미지 관리
- Non-goals: Kubernetes 오케스트레이션, Docker Compose 고급 설정은 별도 문서
Key Concepts
| Concept | Description | Related |
|---|---|---|
| Container | 독립된 실행 환경 (OS 레벨 가상화) | Docker |
| Image | 컨테이너 생성을 위한 템플릿 | Docker command workflow |
| Dockerfile | 이미지 빌드 설정 파일 | Docker command workflow |
| Volume | 컨테이너 외부 저장소 마운트 | Docker library sharing |
| Resource Limit | CPU/메모리/디스크 사용량 제한 | Docker container resource |
Architecture
Docker는 클라이언트-서버 아키텍처로 구성됩니다:
graph TD
A[Docker Client] --> B[Docker Daemon]
B --> C[Container Runtime]
B --> D[Image Store]
B --> E[Network Manager]
B --> F[Volume Manager]
C --> G[Container 1]
C --> H[Container 2]
C --> I[Container N]
Workflow
| Stage | Input | Output |
|---|---|---|
| Build | Dockerfile | Docker Image |
| Run | Docker Image | Running Container |
| Push | Docker Image | Registry Upload |
| Pull | Registry | Docker Image Download |
Detailed Explanation
Docker 기본
Docker는 Linux 컨테이너(LXC)를 기반으로 합니다. 호스트 커널을 공유하면서 격리된 환경을 제공합니다.
Docker 명령어 워크플로우
Dockerfile 작성 → 이미지 빌드 → 컨테이너 실행 → 레지스트리 푸시 → 다른 시스템에서 풀/실행
Docker 컨테이너 리소스
컨테이너는 기본적으로 CPU, 메모리, 디스크 사용량이 제한됩니다. --memory, --cpus 옵션으로 제한을 설정할 수 있습니다.
Docker 라이브러리 공유
볼륨(Volume)과 바인드 마운트를 통해 호스트와 컨테이너 간 파일을 공유합니다.
Configuration
# Docker 버전 확인
docker --version
# 이미지 빌드
docker build -t myapp:latest .
# 컨테이너 실행
docker run -d --name myapp --memory=2g --cpus=2 myapp:latest
# 컨테이너 리소스 제한
docker run -d --memory=4g --memory-swap=4g --cpus=4 myapp:latest
# 로그 확인
docker logs -f myapp
# 컨테이너 상태 확인
docker ps -a
docker stats
Examples
Example 1: Dockerfile 작성
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Example 2: 리소스 제한 컨테이너 실행
docker run -d --name gpu-container --gpus all --memory=8g --cpus=4 --restart=unless-stopped myapp:latest
Best Practices
- 다단계 빌드(Docker multi-stage build) 활용
- .dockerignore 파일 작성
- 공식 이미지 기반 시작
- 불변 태그(immutable tag) 사용
- 컨테이너 로그 관리 설정
- 리소스 제한 필수 적용
Limitations
- Linux 호스트 필요 (Windows/macOS는 VM 오버헤드)
- 커널 기능 의존 (cgroups, namespaces)
- 보안 격리는 호스트 커널 공유로 제한적
References
Related Pages
- Docker command workflow
- Docker container resource
- Container tips and tricks
- Dockerfile tips and tricks
- Kubernetes
Knowledge Graph
Related
→ Kubernetes → Container → Dockerfile → Docker Compose
GPU Docker
Docker에서 GPU 사용하려면 NVIDIA Container Toolkit 필요.
# NVIDIA Container Toolkit 설치
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum install -y nvidia-container-toolkit
sudo systemctl restart docker
# GPU 컨테이너 실행
docker run --gpus all nvidia/cuda:12.2-base nvidia-smi
# 특정 GPU만 사용
docker run --gpus 'device=0,1' nvidia/cuda:12.2-base nvidia-smi
# GPU 메모리 제한
docker run --gpus 'device=0,reserved-memory=4096' nvidia/cuda:12.2-base
Docker Compose
Docker Compose는 멀티 컨테이너 애플리케이션 관리.
version: '3.8'
services:
app:
image: myapp:latest
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
volumes:
redis-data:
# Compose 실행
docker compose up -d
# 로그 확인
docker compose logs -f app
# 서비스 재시작
docker compose restart app
Docker Swarm
Docker Swarm은 Docker 네이티브 오케스트레이션.
# Swarm 초기화
docker swarm init --advertise-addr eth0
# 서비스 배포
docker service create --name myapp --replicas 3 -p 8080:80 myapp:latest
# 서비스 상태 확인
docker service ls
docker service ps myapp
# 스케일링
docker service scale myapp=5