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:alpinedocker start|stop|restart <container>기존 컨테이너(이름 또는 ID)를 시작/중지/재시작합니다.
-t N 종료 전 대기 초(기본 10)
docker restart web && docker logs --tail 50 webdocker 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-webdocker update <c>컨테이너의 자원 제한과 재시작 정책을 런타임에 변경합니다.
--cpus N; --memory SIZE; --memory-swap SIZE; --restart policy
docker update --cpus 1.5 --memory 1g apidocker 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 ERRORdocker 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_productiondocker attach <c>실행 중인 컨테이너에 로컬 STDIN/STDOUT 을 붙입니다(`docker start -i` 와 동일).
--sig-proxy 시그널 프록시; --no-stdin
docker attach web && Ctrl-p Ctrl-q to detachdocker 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}}' webdocker 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-alpinedocker images로컬 데몬의 이미지 목록을 표시합니다.
-a 모두(중간 이미지 포함); -q ID만; --digests; --filter dangling=true
docker images --format '{{.Repository}}:{{.Tag}}\t{{.Size}}' | sort -k2 -h | tail -20docker 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.0docker push <image>이미지(또는 저장소)를 레지스트리로 업로드합니다.
--disable-content-trust; -a 태그된 모든 변형; --quiet
docker push registry.example.com/team/myapp:1.2.0docker 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:alpinedocker 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 mynetdocker network connect|disconnect <net> <c>실행 중인 컨테이너를 네트워크에 연결/분리합니다.
--ip IPV4; --ip6 IPV6; --alias 호스트 별칭; --link container
docker network connect mynet webdocker 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 -qdocker 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 pgdatadocker 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 alwaysdocker compose down컨테이너와 네트워크를 멈추고 삭제; 기본은 익명 볼륨도 함께 삭제합니다.
--volumes 이름 있는 볼륨도; --rmi all|local; --remove-orphans; -t N 타임아웃
docker compose down --rmi local --remove-orphansdocker compose ps / logsCompose 서비스 목록 / 로그 조회.
ps -q ID만; logs -f follow; --tail N; --since
docker compose ps --format json | jq '.[] | {Name, State}' && docker compose logs -f --tail 100 apidocker 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 migratedocker compose build / pull / pushCompose 프로젝트의 이미지 빌드 / 레지스트리에서 pull / 레지스트리로 push.
--no-cache; --pull; --quiet; --parallel
docker compose build --no-cache api workerdocker 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-stdindocker logout [server]설정에서 해당 레지스트리의 인증 정보를 제거합니다.
docker logout && docker info 2>/dev/null | headdocker search <term>Docker Hub 에서 이미지를 검색합니다.
--filter stars=N; --limit N; --format
docker search --filter stars=100 --limit 5 postgres시스템 & 정리
docker system dfDocker 디스크 사용량(이미지, 컨테이너, 볼륨, 빌드 캐시)을 보여줍니다.
-v verbose
docker system df -v | sort -k7 -h | taildocker 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 psdocker info시스템 전역 정보를 표시합니다. 디버깅할 때 유용합니다.
--format
docker info -f '{{.DriverStatus}}'docker port <c>컨테이너의 포트 매핑(호스트 ↔ 컨테이너) 목록을 보여줍니다.
docker port web 80치트시트 버전 1.0.0
Docker Engine 24.0+ 대응