전체 치트시트

Docker 명령어 치트시트

매일 쓰는 Docker CLI 명령어 빠른 참조: 컨테이너 생명주기, 이미지 빌드, 로그/exec, 네트워크, 볼륨, Compose, 레지스트리, 정리 작업 — 자주 쓰는 옵션과 실전 예시까지 함께 정리했습니다.

명령어 46개

컨테이너 생명주기

docker run <image>

이미지로 새 컨테이너를 만들고 시작합니다.

-d 백그라운드; -it 인터랙티브 TTY; --name 이름 지정; -p host:container 포트 publish; -v 볼륨 마운트; -e KEY=VAL 환경변수; --rm 종료 시 자동 삭제; --restart=always|unless-stopped|on-failure

docker run -d --name web -p 8080:80 -v $PWD:/usr/share/nginx/html:ro nginx:alpine
docker start|stop|restart <container>

기존 컨테이너(이름 또는 ID)를 시작/중지/재시작합니다.

-t N 종료 전 대기 초(기본 10)

docker restart web && docker logs --tail 50 web
docker rm <container>

중지된 컨테이너 한 개 이상을 삭제합니다.

-f 실행 중 강제 삭제; -v 익명 볼륨도 함께 삭제

docker rm -f $(docker ps -aq)
docker ps

컨테이너 목록을 표시합니다(기본: 실행 중인 것만).

-a 모두; -q ID만; -s 크기 포함; --format go-template; --filter status|name=...

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
docker rename <c> <new>

컨테이너 이름을 변경합니다.

docker rename web-1 gateway-web
docker update <c>

컨테이너의 자원 제한과 재시작 정책을 런타임에 변경합니다.

--cpus N; --memory SIZE; --memory-swap SIZE; --restart policy

docker update --cpus 1.5 --memory 1g api
docker wait <c>

컨테이너가 종료될 때까지 대기한 뒤 종료 코드를 출력합니다.

docker wait db && echo "db stopped"
docker top <c>

컨테이너 안의 실행 중인 프로세스를 보여줍니다(호스트 PID 네임스페이스의 ps).

docker top web

로그 & Exec

docker logs <c>

컨테이너 로그를 가져옵니다.

-f follow; --tail N; --since timestamp|duration; -t 타임스탬프 포함; --details

docker logs -f --tail 200 -t api | grep ERROR
docker exec -it <c> <cmd>

실행 중인 컨테이너 안에서 명령을 실행합니다(주로 인터랙티브 셸).

-i STDIN 유지; -t pseudo-TTY 할당; -u user; -w workdir; -e KEY=VAL

docker exec -it -u postgres db psql -U postgres app_production
docker attach <c>

실행 중인 컨테이너에 로컬 STDIN/STDOUT 을 붙입니다(`docker start -i` 와 동일).

--sig-proxy 시그널 프록시; --no-stdin

docker attach web && Ctrl-p Ctrl-q to detach
docker cp <c>:<src> <dest>

컨테이너와 로컬 파일 시스템 간에 파일/폴더를 복사합니다.

-L 심볼릭 링크 추적; -a 아카이브 모드

docker cp db:/var/lib/postgresql/data ./pgdata

조회

docker inspect <obj>

Docker 객체(container, image, volume, network)의 저수준 정보를 반환합니다.

-f go-template; --type container|image|network|volume; -s size

docker inspect -f '{{.NetworkSettings.IPAddress}}' web
docker stats

실행 중인 컨테이너의 CPU/메모리/네트워크/디스크 사용량을 실시간으로 보여줍니다.

--no-stream 1회만; -a 모두(중지 포함); --format; --no-trunc

docker stats --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
docker diff <c>

컨테이너 파일 시스템의 변경(추가/변경/삭제)을 확인합니다.

docker diff web | head -20

이미지 작업

docker pull <image>[:tag]

레지스트리에서 이미지(또는 저장소)를 가져옵니다.

-a 태그된 모든 이미지; --platform linux/amd64; -q quiet; --disable-content-trust

docker pull --platform linux/amd64 nginx:1.27-alpine
docker images

로컬 데몬의 이미지 목록을 표시합니다.

-a 모두(중간 이미지 포함); -q ID만; --digests; --filter dangling=true

docker images --format '{{.Repository}}:{{.Tag}}\t{{.Size}}' | sort -k2 -h | tail -20
docker build <path>

Dockerfile 로 이미지를 빌드합니다.

-t name:tag; -f Dockerfile 경로; --no-cache; --build-arg KEY=VAL; --target stage; --progress=plain; --platform

docker build -t myapp:dev --build-arg NODE_ENV=development --progress=plain .
docker tag <src> <dest>

기존 이미지를 가리키는 태그를 만듭니다(별칭 / 푸시 대상).

docker tag myapp:dev registry.example.com/team/myapp:1.2.0
docker push <image>

이미지(또는 저장소)를 레지스트리로 업로드합니다.

--disable-content-trust; -a 태그된 모든 변형; --quiet

docker push registry.example.com/team/myapp:1.2.0
docker rmi <image>

이미지 한 개 이상을 삭제합니다.

-f 강제(자식 있을 때도 untag); --no-prune untagged 부모 유지

docker rmi -f $(docker images --filter 'dangling=true' -q)
docker image prune / docker save / docker load

디스크 회수(dangling/오래된 이미지 필터); 이미지를 tar 로 저장/복원.

-a 모두; --filter 'until=24h'; -o file.tar; -i file.tar

docker image prune -af --filter 'until=72h' && docker save -o nginx.tar nginx:alpine
docker history <image>

이미지의 레이어 / 중간 빌드 이력을 보여줍니다.

--no-trunc; --human; -q ids

docker history --no-trunc --human myapp:dev

네트워크

docker network ls

네트워크 목록을 표시합니다.

--filter driver=bridge|overlay; -q ids; --format

docker network ls --filter driver=bridge --format '{{.Name}}'
docker network create <name>

서비스 디스커버리 & DNS 를 위한 사용자 정의 브리지 네트워크를 만듭니다.

--driver bridge|overlay|macvlan; --subnet CIDR; --gateway; --ipv6; --internal

docker network create --driver bridge --subnet 10.20.0.0/24 mynet
docker network connect|disconnect <net> <c>

실행 중인 컨테이너를 네트워크에 연결/분리합니다.

--ip IPV4; --ip6 IPV6; --alias 호스트 별칭; --link container

docker network connect mynet web
docker network rm / docker network prune

네트워크 한 개 이상을 삭제 / 사용하지 않는 것을 정리합니다.

-f force; --filter 'until=24h'

docker network prune -f

볼륨 & 스토리지

docker volume ls

볼륨 목록을 표시합니다.

--filter dangling=true|driver|name; -q ids; --format

docker volume ls --filter dangling=true -q
docker volume create <name>

이름 있는 볼륨을 만듭니다(Docker 가 관리, 컨테이너 UFS 외부).

--driver local; --opt type=nfs; --opt o=addr; --opt device=:/path

docker volume create --driver local --opt type=nfs --opt o=addr=10.0.0.1 --opt device=:/exports/data pgdata
docker volume rm / docker volume prune

볼륨 한 개 이상을 삭제 / 사용하지 않는 것을 정리합니다.

-f force; --filter 'label=...'

docker volume rm $(docker volume ls -q --filter dangling=true)
docker volume inspect <vol>

볼륨의 저수준 상세(마운트 포인트, 드라이버, 옵션)를 보여줍니다.

docker volume inspect pgdata --format '{{.Mountpoint}}'

Docker Compose

docker compose up

필요 시 빌드 후 compose.yaml 의 서비스를 만들고 시작합니다.

-d 백그라운드; --build 강제 빌드; --force-recreate; --pull always|missing|never; -f file

docker compose -f compose.prod.yaml up -d --pull always
docker compose down

컨테이너와 네트워크를 멈추고 삭제; 기본은 익명 볼륨도 함께 삭제합니다.

--volumes 이름 있는 볼륨도; --rmi all|local; --remove-orphans; -t N 타임아웃

docker compose down --rmi local --remove-orphans
docker compose ps / logs

Compose 서비스 목록 / 로그 조회.

ps -q ID만; logs -f follow; --tail N; --since

docker compose ps --format json | jq '.[] | {Name, State}' && docker compose logs -f --tail 100 api
docker compose exec / run

실행 중 / 새 서비스 컨테이너에서 명령을 실행합니다.

exec --user; exec -e VAR=val; run --rm 실행 후 컨테이너 삭제

docker compose exec db psql -U postgres app && docker compose run --rm api npm run migrate
docker compose build / pull / push

Compose 프로젝트의 이미지 빌드 / 레지스트리에서 pull / 레지스트리로 push.

--no-cache; --pull; --quiet; --parallel

docker compose build --no-cache api worker
docker compose restart / stop / start / scale

서비스 생명주기 단축 명령; scale 은 replica 수를 조정합니다.

restart <svc>; stop <svc>; start <svc>; scale api=4 worker=2

docker compose restart api && docker compose up -d --scale worker=4

레지스트리 & Hub

docker login [server]

레지스트리에 인증합니다. `docker login` 은 Docker Hub 용.

-u user; -p password; --password-stdin

echo "$REGISTRY_TOKEN" | docker login ghcr.io -u myuser --password-stdin
docker logout [server]

설정에서 해당 레지스트리의 인증 정보를 제거합니다.

docker logout && docker info 2>/dev/null | head
docker search <term>

Docker Hub 에서 이미지를 검색합니다.

--filter stars=N; --limit N; --format

docker search --filter stars=100 --limit 5 postgres

시스템 & 정리

docker system df

Docker 디스크 사용량(이미지, 컨테이너, 볼륨, 빌드 캐시)을 보여줍니다.

-v verbose

docker system df -v | sort -k7 -h | tail
docker system prune

중지된 컨테이너, dangling 이미지, 사용하지 않는 네트워크를 모두 삭제합니다.

-a 모든 이미지; --volumes 볼륨도; --filter 'until=24h'; -f force

docker system prune -af --volumes --filter 'until=72h'
docker builder prune

빌드 캐시를 정리합니다(오래된 레이어의 디스크 확보).

-af; --filter 'until=72h'; --keep-storage SIZE

docker builder prune -af --filter 'until=72h'
docker context ls / use

다중 호스트/다중 데몬용 Docker context 관리(SSH 원격 context 포함).

ls --format json; use myctx

docker context create myhost --docker host=ssh://user@server && docker context use myhost && docker ps
docker info

시스템 전역 정보를 표시합니다. 디버깅할 때 유용합니다.

--format

docker info -f '{{.DriverStatus}}'
docker port <c>

컨테이너의 포트 매핑(호스트 ↔ 컨테이너) 목록을 보여줍니다.

docker port web 80

치트시트 버전 1.0.0

Docker Engine 24.0+ 대응