Docker 치트시트
프로덕션 환경에서 자주 사용하는 Docker 명령어 모음. 검색, 필터, 원클릭 복사를 지원합니다.
컨테이너 라이프사이클
7 itemsdocker run
새 컨테이너를 생성하고 실행합니다.
# Run interactively docker run -it ubuntu bash # Run in background with port mapping docker run -d -p 8080:80 --name my-nginx nginx # Run with environment variables docker run -d -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres:15
docker start / stop
중지된 컨테이너를 시작하거나 실행 중인 컨테이너를 중지합니다.
# Start a stopped container docker start my-nginx # Stop a running container (graceful) docker stop my-nginx # Stop with timeout (seconds) docker stop -t 30 my-nginx
docker restart
컨테이너를 재시작합니다.
docker restart my-nginx # Restart with timeout docker restart -t 10 my-nginx
docker rm
중지된 컨테이너를 삭제합니다.
# Remove a single container docker rm my-nginx # Force remove a running container docker rm -f my-nginx # Remove all stopped containers docker rm $(docker ps -aq -f status=exited)
docker kill
컨테이너에 시그널을 보냅니다 (즉시 종료).
# Kill with SIGKILL (default) docker kill my-nginx # Send specific signal docker kill -s SIGTERM my-nginx
docker pause / unpause
컨테이너의 모든 프로세스를 일시 정지/재개합니다.
# Pause container docker pause my-nginx # Resume container docker unpause my-nginx
docker exec
실행 중인 컨테이너에서 명령을 실행합니다.
# Open a shell inside a container docker exec -it my-nginx bash # Run a single command docker exec my-nginx cat /etc/nginx/nginx.conf # Run as specific user docker exec -u root my-app whoami
이미지 관리
7 itemsdocker build
Dockerfile로 이미지를 빌드합니다.
# Build from current directory docker build -t my-app:1.0 . # Build with specific Dockerfile docker build -f Dockerfile.prod -t my-app:prod . # Build with build args docker build --build-arg NODE_ENV=production -t my-app . # Multi-platform build docker buildx build --platform linux/amd64,linux/arm64 -t my-app .
docker pull
레지스트리에서 이미지를 다운로드합니다.
# Pull latest docker pull nginx # Pull specific version docker pull node:20-alpine # Pull from custom registry docker pull ghcr.io/user/my-app:latest
docker push
로컬 이미지를 레지스트리에 업로드합니다.
# Tag for registry docker tag my-app:latest ghcr.io/user/my-app:latest # Push to registry docker push ghcr.io/user/my-app:latest
docker images
로컬에 저장된 이미지 목록을 표시합니다.
# List all images docker images # Filter by name docker images nginx # Show only image IDs docker images -q
docker rmi
로컬 이미지를 삭제합니다.
# Remove specific image docker rmi nginx:latest # Force remove docker rmi -f my-app:old # Remove all dangling images docker rmi $(docker images -f "dangling=true" -q)
docker tag
이미지에 새 태그를 추가합니다.
docker tag my-app:latest my-app:v1.0.0 docker tag my-app:latest ghcr.io/user/my-app:v1.0.0
docker history
이미지의 레이어 히스토리를 표시합니다.
docker history nginx # Shows each layer, size, and the command that created it # Show full commands (not truncated) docker history --no-trunc nginx
검사 & 로그
7 itemsdocker ps
실행 중인 컨테이너 목록을 표시합니다.
# Running containers only
docker ps
# All containers (including stopped)
docker ps -a
# Show only IDs
docker ps -q
# Custom format
docker ps --format "table {{.Names}} {{.Status}} {{.Ports}}"docker logs
컨테이너의 로그를 확인합니다.
# View all logs docker logs my-nginx # Follow logs in real-time docker logs -f my-nginx # Last 100 lines docker logs --tail 100 my-nginx # Logs since timestamp docker logs --since 2024-01-01T00:00:00 my-nginx
docker inspect
컨테이너 또는 이미지의 상세 설정을 JSON으로 표시합니다.
# Full inspection
docker inspect my-nginx
# Get IP address
docker inspect -f "{{.NetworkSettings.IPAddress}}" my-nginx
# Get mounted volumes
docker inspect -f "{{json .Mounts}}" my-nginx | jq .docker top
컨테이너 내에서 실행 중인 프로세스를 표시합니다.
docker top my-nginx # PID USER COMMAND # 1 root nginx: master process # 29 nginx nginx: worker process
docker stats
컨테이너의 실시간 리소스 사용량을 표시합니다.
# All running containers docker stats # Specific container docker stats my-nginx # One-shot (no streaming) docker stats --no-stream
docker port
컨테이너의 포트 매핑을 표시합니다.
docker port my-nginx # 80/tcp -> 0.0.0.0:8080
docker cp
컨테이너와 호스트 간에 파일을 복사합니다.
# Copy from container to host docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf # Copy from host to container docker cp ./index.html my-nginx:/usr/share/nginx/html/
네트워킹
5 itemsdocker network create
사용자 정의 네트워크를 생성합니다.
# Create bridge network docker network create my-network # Create with subnet docker network create --subnet=172.20.0.0/16 my-network # Create overlay network (Swarm) docker network create --driver overlay my-overlay
docker network ls
모든 네트워크 목록을 표시합니다.
docker network ls # NETWORK ID NAME DRIVER SCOPE # abc123 bridge bridge local # def456 host host local # ghi789 my-network bridge local
docker network connect
실행 중인 컨테이너를 네트워크에 연결합니다.
# Connect to network docker network connect my-network my-nginx # Connect with alias docker network connect --alias webserver my-network my-nginx
docker network inspect
네트워크의 상세 정보를 표시합니다.
docker network inspect my-network # Shows connected containers, subnet, gateway, etc.
docker network rm
네트워크를 삭제합니다.
# Remove specific network docker network rm my-network # Remove all unused networks docker network prune
볼륨 (데이터 영속성)
6 itemsdocker volume create
명명된 볼륨을 생성합니다.
docker volume create pgdata # Use in a container docker run -d -v pgdata:/var/lib/postgresql/data postgres:15
docker volume ls
모든 볼륨 목록을 표시합니다.
docker volume ls # Filter dangling volumes docker volume ls -f dangling=true
docker volume rm
볼륨을 삭제합니다.
docker volume rm pgdata # Cannot remove volumes in use by containers
docker volume inspect
볼륨의 상세 정보를 표시합니다.
docker volume inspect pgdata # Mountpoint: /var/lib/docker/volumes/pgdata/_data
docker volume prune
사용되지 않는 모든 볼륨을 삭제합니다.
docker volume prune # Skip confirmation docker volume prune -f
Bind Mount vs Volume
호스트 디렉토리를 직접 마운트하는 바인드 마운트 사용법입니다.
# Bind mount (host path) docker run -v /host/path:/container/path nginx # Bind mount read-only docker run -v /host/path:/container/path:ro nginx # Named volume (Docker-managed) docker run -v my-volume:/container/path nginx
Docker Compose
7 itemsdocker compose up
Compose 파일에 정의된 모든 서비스를 시작합니다.
# Start in foreground docker compose up # Start in background docker compose up -d # Rebuild images before starting docker compose up -d --build # Start specific service only docker compose up -d postgres redis
docker compose down
모든 서비스를 중지하고 네트워크를 제거합니다.
# Stop and remove containers + networks docker compose down # Also remove volumes docker compose down -v # Also remove images docker compose down --rmi all
docker compose build
서비스의 이미지를 빌드합니다.
# Build all services docker compose build # Build without cache docker compose build --no-cache # Build specific service docker compose build app
docker compose logs
서비스의 로그를 확인합니다.
# All services docker compose logs # Follow specific service docker compose logs -f app # Last 50 lines docker compose logs --tail 50 app
docker compose ps
Compose 프로젝트의 서비스 상태를 표시합니다.
docker compose ps # NAME SERVICE STATUS PORTS # app-1 app running 0.0.0.0:3000->3000/tcp # db-1 db running 5432/tcp
docker compose exec
실행 중인 서비스 컨테이너에서 명령을 실행합니다.
# Open shell in app service docker compose exec app bash # Run database migration docker compose exec app python manage.py migrate # Access database CLI docker compose exec db psql -U postgres
docker compose pull
서비스에 사용되는 이미지를 업데이트합니다.
# Pull all service images docker compose pull # Pull and recreate docker compose pull && docker compose up -d
레지스트리 & 내보내기
5 itemsdocker login
컨테이너 레지스트리에 로그인합니다.
# Docker Hub docker login # GitHub Container Registry docker login ghcr.io -u USERNAME # AWS ECR aws ecr get-login-password | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com
docker save
이미지를 tar 파일로 저장합니다.
# Save image to file docker save -o my-app.tar my-app:latest # Save with gzip compression docker save my-app:latest | gzip > my-app.tar.gz
docker load
tar 파일에서 이미지를 불러옵니다.
# Load from file docker load -i my-app.tar # Load from gzipped file docker load < my-app.tar.gz
docker export
컨테이너의 파일 시스템을 tar로 내보냅니다.
docker export my-container > container-fs.tar
docker import
tar 파일에서 이미지를 생성합니다.
docker import container-fs.tar my-image:imported
시스템 & 정리
6 itemsdocker system prune
사용하지 않는 컨테이너, 네트워크, 이미지, 빌드 캐시를 모두 삭제합니다.
# Remove unused data docker system prune # Also remove unused volumes docker system prune --volumes # Remove everything including unused images docker system prune -a # Skip confirmation docker system prune -af
docker image prune
댕글링(태그 없는) 이미지를 삭제합니다.
# Remove dangling images docker image prune # Remove all unused images docker image prune -a # Remove images older than 24h docker image prune -a --filter "until=24h"
docker container prune
중지된 모든 컨테이너를 삭제합니다.
docker container prune # Skip confirmation docker container prune -f
docker system df
Docker의 디스크 사용량을 표시합니다.
docker system df # TYPE TOTAL ACTIVE SIZE RECLAIMABLE # Images 15 5 4.2GB 2.8GB (66%) # Containers 8 3 120MB 85MB (70%) # Volumes 6 4 1.5GB 200MB (13%) # Verbose output docker system df -v
docker info
Docker 데몬의 시스템 정보를 표시합니다.
docker info # Server Version, Storage Driver, CPU, Memory, # Number of containers, images, etc.
docker builder prune
BuildKit 빌드 캐시를 삭제합니다.
# Remove all build cache docker builder prune # Keep cache from last 24h docker builder prune --filter "until=24h" # Remove all without confirmation docker builder prune -af
Docker 치트시트 사용 가이드
Docker는 애플리케이션을 컨테이너로 패키징하여 어디서든 동일하게 실행할 수 있게 해주는 플랫폼입니다. 이 치트시트는 컨테이너 관리, 이미지 빌드, 네트워킹, 볼륨, Compose 등 프로덕션 환경에서 필수적인 Docker 명령어를 정리했습니다.
컨테이너 vs 가상 머신
컨테이너는 호스트 OS의 커널을 공유하여 VM보다 훨씬 가볍고 빠르게 시작됩니다. VM은 전체 OS를 포함하지만, 컨테이너는 애플리케이션과 의존성만 패키징합니다. 이 차이로 인해 컨테이너는 초 단위로 시작되고 MB 단위의 크기를 가집니다.
Dockerfile 작성 모범 사례
멀티 스테이지 빌드로 빌드 도구와 런타임을 분리하세요. Alpine이나 slim 기반 이미지를 사용하여 크기를 줄이세요. RUN 명령을 합쳐 레이어 수를 최소화하고, COPY는 자주 변경되는 파일을 나중에 배치하여 캐시를 활용하세요.
프로덕션 보안 팁
컨테이너를 root 사용자로 실행하지 마세요 (USER 명령 사용). 이미지를 정기적으로 업데이트하여 보안 패치를 적용하세요. 민감한 정보는 환경 변수 대신 Docker secrets를 사용하고, 네트워크를 분리하여 서비스 간 접근을 제한하세요.