EasyDebug.NET

Docker 명령어 치트시트

이미지부터 Compose까지 9개 그룹과 실행 예시

명령어 92개

docker images이미지

로컬 이미지와 크기 목록

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker pull nginx:alpine이미지

이미지 내려받기, 태그 생략 시 latest

docker pull nginx:1.27-alpine
docker build -t app:1.0 .이미지

현재 디렉터리 Dockerfile로 이미지 빌드

docker build -t registry.example.com/app:1.0 .
docker build --no-cache -t app:1.0 .이미지

캐시 없이 재빌드, 캐시로 인한 이상 동작 확인

docker build --no-cache -t app:1.0 .
docker build -f Dockerfile.prod .이미지

기본이 아닌 이름의 Dockerfile 지정

docker build -f docker/Dockerfile.prod -t app:prod .
docker build --target builder -t app:debug .이미지

특정 스테이지까지만 빌드, 멀티스테이지 디버깅에 유용

docker build --target builder -t app:debug .
docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 .이미지

한 번에 멀티 아키텍처 이미지 빌드

docker buildx build --platform linux/amd64,linux/arm64 --push -t app:1.0 .
docker tag app:1.0 registry.example.com/app:1.0이미지

푸시 전 저장소 주소로 태그 지정

docker tag app:1.0 registry.example.com/team/app:1.0
docker rmi <image>이미지

이미지 삭제, 컨테이너가 쓰면 먼저 삭제 필요

docker rmi app:1.0
docker history <image>이미지

이미지 레이어와 크기 확인

docker history --no-trunc app:1.0
docker save -o app.tar app:1.0이미지

이미지를 tar로 내보내 오프라인 전송

docker save -o app.tar app:1.0
docker load -i app.tar이미지

tar 파일에서 이미지 불러오기

docker load -i app.tar
docker inspect <image>이미지

이미지 메타데이터 확인: 환경변수, 엔트리포인트, 포트

docker inspect --format "{{.Config.Env}}" nginx
docker run -d --name web -p 8080:80 nginx컨테이너 수명 주기

백그라운드 실행과 포트 매핑, 가장 흔한 형태

docker run -d --name web -p 8080:80 nginx:alpine
docker run -it --rm alpine sh컨테이너 수명 주기

일회용 대화형 컨테이너, 종료 시 자동 삭제

docker run -it --rm alpine sh
docker run -v pgdata:/var/lib/postgresql/data postgres컨테이너 수명 주기

명명 볼륨 마운트, 컨테이너 삭제 후에도 데이터 유지

docker run -d --name pg -v pgdata:/var/lib/postgresql/data postgres:16
docker run -e TZ=Asia/Shanghai -e ENV=prod app:1.0컨테이너 수명 주기

환경변수 전달, 시간대 문제는 대개 여기서 시작

docker run -d -e TZ=Asia/Shanghai -e SPRING_PROFILES_ACTIVE=prod app:1.0
docker run --network host nginx컨테이너 수명 주기

호스트 네트워크 직접 사용, 포트 매핑 없음

docker run -d --network host nginx
docker run --restart unless-stopped -d app:1.0컨테이너 수명 주기

재시작 정책 설정, 재부팅 후 자동 기동

docker run -d --restart unless-stopped app:1.0
docker run --memory 512m --cpus 1.5 app:1.0컨테이너 수명 주기

메모리와 CPU 제한, 컨테이너가 호스트를 잡아먹는 것 방지

docker run -d --memory 512m --cpus 1.5 app:1.0
docker ps컨테이너 수명 주기

실행 중인 컨테이너만 표시

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
docker ps -a컨테이너 수명 주기

종료된 것 포함 전체 컨테이너 목록

docker ps -a --filter "status=exited"
docker start <ct>컨테이너 수명 주기

기존 컨테이너 시작, 설정 그대로 유지

docker start web
docker stop <ct>컨테이너 수명 주기

정상 종료: SIGTERM 후 타임아웃 시 SIGKILL

docker stop -t 30 web
docker restart <ct>컨테이너 수명 주기

컨테이너 재시작, 설정 변경 후 자주 필요

docker restart web
docker rm <ct>컨테이너 수명 주기

중지된 컨테이너 삭제

docker rm web-old
docker rm -f <ct>컨테이너 수명 주기

실행 중 컨테이너 강제 삭제

docker rm -f web
docker rename <old> <new>컨테이너 수명 주기

컨테이너 이름 변경

docker rename web web-01
docker update --memory 1g <ct>컨테이너 수명 주기

재생성 없이 리소스 제한 조정

docker update --memory 1g --memory-swap 1g web
docker attach <ct>컨테이너 수명 주기

PID 1에 접속, Ctrl+C 시 컨테이너도 종료되므로 exec 권장

docker attach web
docker exec -it web sh접속과 파일 전송

실행 중 컨테이너 접속, bash 없으면 sh 사용

docker exec -it web /bin/sh
docker exec -u root -it web sh접속과 파일 전송

root로 접속, 기본 사용자 권한이 부족할 때

docker exec -u 0 -it web sh
docker exec web ls -l /etc/nginx접속과 파일 전송

컨테이너에서 단일 명령 실행

docker exec web nginx -t
docker exec web cat /etc/resolv.conf접속과 파일 전송

컨테이너 DNS 설정, 이름 해석 실패 시 우선 확인

docker exec web cat /etc/resolv.conf
docker cp ./app.conf web:/etc/nginx/conf.d/접속과 파일 전송

호스트에서 컨테이너로 파일 복사

docker cp ./app.conf web:/etc/nginx/conf.d/app.conf
docker cp web:/var/log/app.log ./접속과 파일 전송

컨테이너 파일을 호스트로 복사

docker cp web:/var/log/app.log ./app.log
docker diff <ct>접속과 파일 전송

이미지 대비 컨테이너 내부 변경 파일 목록

docker diff web
docker export <ct> -o rootfs.tar접속과 파일 전송

컨테이너 파일시스템 내보내기(이미지 메타데이터 제외)

docker export web -o web-rootfs.tar
docker network ls네트워크

모든 네트워크 목록

docker network ls
docker network create app-net네트워크

사용자 정의 브리지 네트워크 생성

docker network create --driver bridge app-net
docker network inspect app-net네트워크

네트워크 내 컨테이너 IP 확인, 통신 문제 첫 점검

docker network inspect --format "{{range .Containers}}{{.Name}} {{.IPv4Address}}{{end}}" app-net
docker network connect app-net <ct>네트워크

실행 중 컨테이너를 네트워크에 연결

docker network connect app-net web
docker network disconnect app-net <ct>네트워크

컨테이너를 네트워크에서 분리

docker network disconnect app-net web
docker network rm app-net네트워크

네트워크 삭제, 연결된 컨테이너가 있으면 먼저 분리

docker network rm app-net
docker port <ct>네트워크

컨테이너 포트 매핑 확인

docker port web
docker run --network app-net --name api app:1.0네트워크

사용자 정의 네트워크에서는 컨테이너 이름으로 서로 접근

docker run -d --network app-net --name api app:1.0
docker volume ls볼륨

모든 볼륨 목록

docker volume ls -f dangling=true
docker volume create pgdata볼륨

명명 볼륨 생성, 백업과 이전에 유리

docker volume create pgdata
docker volume inspect pgdata볼륨

볼륨의 호스트 실제 경로 확인

docker volume inspect --format "{{.Mountpoint}}" pgdata
docker run -v $(pwd)/data:/data app:1.0볼륨

호스트 디렉터리 바인드 마운트, 수정 즉시 반영

docker run -d -v $(pwd)/data:/app/data app:1.0
docker run -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx볼륨

설정 파일 읽기 전용 마운트, 컨테이너가 호스트 파일을 바꾸지 못하게

docker run -d -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro nginx
docker volume rm pgdata볼륨

볼륨 삭제, 사용 중이면 컨테이너 먼저 삭제

docker volume rm pgdata
docker volume prune볼륨

사용되지 않는 댕글링 볼륨 정리

docker volume prune -f
docker inspect -f "{{.Mounts}}" <ct>볼륨

컨테이너 실제 마운트 확인, 설정 미반영 디버깅

docker inspect -f "{{json .Mounts}}" web
docker compose up -dCompose

compose.yaml 기준으로 전체 서비스 백그라운드 시작

docker compose up -d
docker compose up -d --buildCompose

이미지 재빌드 후 시작, Dockerfile 변경 시 필요

docker compose up -d --build
docker compose downCompose

컨테이너와 네트워크 중지·삭제, 볼륨은 유지

docker compose down
docker compose down -vCompose

볼륨까지 삭제, 데이터 소실 주의

docker compose down -v --remove-orphans
docker compose psCompose

이 프로젝트의 컨테이너 상태 확인

docker compose ps -a
docker compose logs -f apiCompose

특정 서비스 로그 추적

docker compose logs -f --tail 100 api
docker compose exec api shCompose

서비스 컨테이너 접속

docker compose exec api /bin/sh
docker compose restart apiCompose

특정 서비스만 재시작

docker compose restart api
docker compose pullCompose

compose 파일이 참조하는 최신 이미지 내려받기

docker compose pull
docker compose configCompose

compose 파일을 최종 설정으로 전개, 문법과 변수 검증

docker compose config
docker compose up -d --scale web=3Compose

3개 인스턴스로 확장(고정 포트 매핑 불가)

docker compose up -d --scale web=3
docker compose --profile debug upCompose

특정 profile의 서비스만 기동

docker compose --profile debug up -d
docker login registry.example.com레지스트리

프라이빗 저장소 로그인, 자격 증명은 ~/.docker/config.json에 저장

docker login registry.example.com -u ci
docker logout registry.example.com레지스트리

로그아웃 및 저장된 자격 증명 삭제

docker logout registry.example.com
docker push registry.example.com/app:1.0레지스트리

이미지 푸시, 먼저 저장소 주소로 태그 필요

docker push registry.example.com/team/app:1.0
docker search nginx레지스트리

Docker Hub에서 이미지 검색

docker search --limit 10 nginx
docker manifest inspect nginx:latest레지스트리

이미지가 지원하는 아키텍처 확인

docker manifest inspect nginx:latest
docker buildx imagetools inspect app:1.0레지스트리

원격 멀티 아키텍처 이미지 매니페스트 상세 확인

docker buildx imagetools inspect registry.example.com/app:1.0
docker system df정리

이미지, 컨테이너, 볼륨, 빌드 캐시의 디스크 사용량

docker system df -v
docker system prune정리

중지된 컨테이너, 미사용 네트워크, 댕글링 이미지 정리

docker system prune -f
docker system prune -a --volumes정리

미사용 이미지와 볼륨까지 정리, 위험

docker system prune -a --volumes -f
docker builder prune정리

빌드 캐시만 정리, 캐시가 디스크를 차지할 때

docker builder prune -a -f
docker container prune정리

종료된 컨테이너 모두 삭제

docker container prune -f --filter "until=24h"
docker image prune정리

댕글링 이미지 삭제, -a는 미사용까지 삭제

docker image prune -a -f
docker network prune정리

사용하지 않는 네트워크 정리

docker network prune -f
docker rm -v $(docker ps -aq)정리

모든 컨테이너와 익명 볼륨 일괄 삭제

docker rm -f -v $(docker ps -aq)
docker logs -f --tail 100 web디버깅과 리소스

로그 마지막 100줄 추적, 디버깅 첫 단계

docker logs -f --tail 100 web
docker logs --since 10m web디버깅과 리소스

최근 10분 로그만 확인

docker logs --since 10m --timestamps web
docker inspect -f "{{.State.Status}}" web디버깅과 리소스

컨테이너 상태 조회, 스크립트에 적합

docker inspect -f "{{.State.Status}} exit={{.State.ExitCode}}" web
docker inspect -f "{{.State.ExitCode}}" <ct>디버깅과 리소스

종료 코드 확인, 137은 대개 OOM

docker inspect -f "{{.State.ExitCode}}" web
docker stats디버깅과 리소스

컨테이너별 CPU, 메모리, 네트워크 사용량 실시간 확인

docker stats --no-stream
docker top <ct>디버깅과 리소스

컨테이너 내부 프로세스 확인

docker top web
docker events디버깅과 리소스

Docker 이벤트 실시간 수신, 컨테이너 종료·재시작 확인

docker events --filter "container=web"
docker run -it --rm --entrypoint sh app:1.0디버깅과 리소스

엔트리포인트 재정의로 이미지 점검, 컨테이너 기동 실패 원인 확인

docker run -it --rm --entrypoint sh app:1.0
docker run -it --rm --network container:web nicolaka/netshoot디버깅과 리소스

네트워크 툴 이미지로 대상 컨테이너 네트워크 공유, 연결 테스트

docker run -it --rm --network container:web nicolaka/netshoot
docker build --progress=plain -t app:1.0 .디버깅과 리소스

전체 빌드 로그 출력, 실패 단계 파악

docker build --progress=plain --no-cache -t app:1.0 .
docker inspect -f "{{json .HostConfig.RestartPolicy}}" <ct>디버깅과 리소스

재시작 정책이 실제 적용됐는지 확인

docker inspect -f "{{json .HostConfig.RestartPolicy}}" web
docker diff <ct> | head -50디버깅과 리소스

컨테이너에서 변경된 파일 확인

docker diff web | head -50

뭔가 잘못됐거나 빠진 게 있나요?

피드백 보내기
작성자의 블로그
아이디어 보내기