docker

Docker Engine 24.0+

매일 쓰는 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

관련 명령어 치트시트

Docker 소개

Docker는 Solomon Hykes가 PyCon 2013에서 처음 공개한 오픈 소스 컨테이너 엔진으로, 현재 Docker Inc.와 Cloud Native Computing Foundation이 공동으로 관리하고 있습니다. 현재 안정 버전은 Docker Engine 24.0+(런타임 컴포넌트)이며, `dockerd`가 OCI 호환 이미지를 기반으로 빌드된 컨테이너를 오케스트레이션합니다. 컨테이너는 애플리케이션과 그 의존성(라이브러리, 설정, 런타임)을 읽기 전용 베이스 위에 레이어로 쌓은 이미지로 패키징합니다. 레이어는 SHA-256으로 콘텐츠 주소되며, 빌드 간 캐시되고 실행 중인 컨테이너 간 공유됩니다. Docker CLI는 전체 라이프사이클 — `docker build`, `docker run`, `docker ps`, `docker exec`, `docker logs`, `docker compose`(다중 컨테이너 앱), `docker network` / `docker volume`(네트워크와 볼륨), `docker push` / `docker pull`(레지스트리) — 을 포괄하며, Kubernetes 클러스터에서도 컨테이너 작업의 공용어가 됩니다. 로컬에서 운영 환경을 미러링하거나, CI에서 재현 가능한 작업을 돌리거나, Compose 스택을 구성할 때 Docker를 사용하고, 자동 스케줄링·자가 치유·다중 노드 롤링 배포가 필요할 때 Kubernetes로 가세요. Docker 데몬은 기본적으로 로컬 소켓에 바인드되므로 TLS로 보호하고, 절대 인터넷에 노출하지 마세요.

치트시트 버전 1.0.0