Docker 치트시트

프로덕션 환경에서 자주 사용하는 Docker 명령어 모음. 검색, 필터, 원클릭 복사를 지원합니다.

📦

컨테이너 라이프사이클

7 items

docker 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
Tip: -d는 백그라운드 실행, -it는 대화형 터미널 모드입니다.

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
Tip: stop은 SIGTERM 후 대기하지만, kill은 즉시 SIGKILL을 보냅니다.

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 items

docker 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 .
Tip: .dockerignore 파일로 불필요한 파일을 빌드 컨텍스트에서 제외하세요.

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
Tip: 어느 레이어가 이미지 크기를 차지하는지 확인하여 최적화할 수 있습니다.
🔍

검사 & 로그

7 items

docker 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
Tip: -f --tail 100 조합으로 최근 로그부터 실시간 추적하세요.

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 items

docker 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
Tip: 사용자 정의 네트워크에서는 컨테이너 이름으로 DNS가 자동 해석됩니다.

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
Tip: 연결된 컨테이너가 있으면 먼저 disconnect해야 삭제할 수 있습니다.
💾

볼륨 (데이터 영속성)

6 items

docker volume create

명명된 볼륨을 생성합니다.

docker volume create pgdata

# Use in a container
docker run -d -v pgdata:/var/lib/postgresql/data postgres:15
Tip: 명명된 볼륨은 컨테이너를 삭제해도 데이터가 유지됩니다.

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
Tip: 프로덕션 환경에서는 주의하세요. 중요한 데이터가 삭제될 수 있습니다.

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 items

docker 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
Tip: --build 플래그를 사용하면 코드 변경 후 이미지를 자동으로 다시 빌드합니다.

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
Tip: 정기적으로 pull하여 보안 패치가 적용된 최신 이미지를 사용하세요.
📤

레지스트리 & 내보내기

5 items

docker 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
Tip: 인터넷 없는 환경으로 이미지를 전송할 때 유용합니다.

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
Tip: save/load는 이미지 레이어를 보존하고, export/import는 단일 레이어로 평탄화합니다.
🧹

시스템 & 정리

6 items

docker 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
Tip: 개발 환경에서 디스크 공간이 부족할 때 가장 먼저 실행하세요.

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
Tip: 빌드 캐시가 수십 GB까지 쌓일 수 있으므로 주기적으로 정리하세요.

Docker 치트시트 사용 가이드

Docker는 애플리케이션을 컨테이너로 패키징하여 어디서든 동일하게 실행할 수 있게 해주는 플랫폼입니다. 이 치트시트는 컨테이너 관리, 이미지 빌드, 네트워킹, 볼륨, Compose 등 프로덕션 환경에서 필수적인 Docker 명령어를 정리했습니다.

컨테이너 vs 가상 머신

컨테이너는 호스트 OS의 커널을 공유하여 VM보다 훨씬 가볍고 빠르게 시작됩니다. VM은 전체 OS를 포함하지만, 컨테이너는 애플리케이션과 의존성만 패키징합니다. 이 차이로 인해 컨테이너는 초 단위로 시작되고 MB 단위의 크기를 가집니다.

Dockerfile 작성 모범 사례

멀티 스테이지 빌드로 빌드 도구와 런타임을 분리하세요. Alpine이나 slim 기반 이미지를 사용하여 크기를 줄이세요. RUN 명령을 합쳐 레이어 수를 최소화하고, COPY는 자주 변경되는 파일을 나중에 배치하여 캐시를 활용하세요.

프로덕션 보안 팁

컨테이너를 root 사용자로 실행하지 마세요 (USER 명령 사용). 이미지를 정기적으로 업데이트하여 보안 패치를 적용하세요. 민감한 정보는 환경 변수 대신 Docker secrets를 사용하고, 네트워크를 분리하여 서비스 간 접근을 제한하세요.

FAQ

Related Tools

Also Used Together