카테고리 없음

Docker 기본 - 기본 명령어 정리 치트시트

cell-devlog 2026. 5. 21. 10:29
반응형

자주 쓰는 것, 알아두면 좋은 것, 실무에서 많이 찾는 것 전부 정리


📊 1. 리소스 모니터링

# 전체 컨테이너 실시간 모니터링
docker stats

# 특정 컨테이너만
docker stats <컨테이너명>

# 한 번만 출력하고 종료 (실시간 X)
docker stats --no-stream

# 커스텀 포맷 출력
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}"

# CPU limit 확인 (stats에는 없음, inspect로 봐야 함)
docker inspect <컨테이너> | grep -E "NanoCpus|CpuShares|CpuQuota"

# 전체 컨테이너 limit 한 번에 확인
docker inspect $(docker ps -q) \
  --format '{{.Name}} | CPUs: {{.HostConfig.NanoCpus}} | Mem: {{.HostConfig.Memory}}'

CPU % 해석: 100% = 코어 1개 100% 사용. --cpus="16" 이면 최대 1600%까지 정상.


📋 2. 컨테이너 조회

# 실행 중인 컨테이너 목록
docker ps

# 전체 컨테이너 목록 (exited 포함)
docker ps -a

# exited 상태만 필터링
docker ps -f status=exited

# 특정 이름 패턴으로 필터링
docker ps -f name=my_app

# 이름·상태·포트만 출력
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# 컨테이너 ID만 출력
docker ps -q

# 전체 컨테이너 ID만 출력 (exited 포함)
docker ps -aq

# 마지막으로 실행된 컨테이너
docker ps -l

# 최근 n개 컨테이너
docker ps -n 5

🗑️ 3. 컨테이너 삭제

# exited 컨테이너 전부 삭제 (확인 없이) ← 추천
docker container prune -f

# exited 컨테이너 삭제 (확인 프롬프트 있음)
docker container prune

# exited 컨테이너만 선택해서 삭제
docker rm $(docker ps -a -q -f status=exited)

# 특정 컨테이너 삭제
docker rm <컨테이너명 or ID>

# 실행 중인 컨테이너 강제 삭제
docker rm -f <컨테이너명>

# 전체 컨테이너 강제 삭제 (주의!)
docker rm -f $(docker ps -aq)

# 컨테이너 + 볼륨 함께 삭제
docker rm -v <컨테이너명>

🖼️ 4. 이미지 관리

# 로컬 이미지 목록
docker images

# 이미지 ID만 출력
docker images -q

# dangling(태그 없는) 이미지만 보기
docker images -f dangling=true

# 이미지 삭제
docker rmi <이미지:태그>

# 이미지 강제 삭제
docker rmi -f <이미지>

# dangling 이미지 삭제
docker image prune -f

# 미사용 이미지 전부 삭제 (주의!)
docker image prune -af

# 이미지 pull
docker pull <이미지:태그>

# 이미지 상세 정보
docker inspect <이미지>

# 이미지 레이어 히스토리
docker history <이미지>

# 이미지 빌드
docker build -t <이름:태그> .

# 캐시 없이 빌드
docker build --no-cache -t <이름:태그> .

# 빌드 인자 전달
docker build --build-arg ENV=production -t <이름:태그> .

# 이미지 태그 추가
docker tag <기존이미지> <새이름:태그>

# 이미지 저장 (파일로)
docker save -o image.tar <이미지>

# 이미지 불러오기 (파일에서)
docker load -i image.tar

▶️ 5. 컨테이너 실행

# 기본 실행
docker run <이미지>

# 백그라운드 실행
docker run -d <이미지>

# 이름 지정해서 실행
docker run --name my_container <이미지>

# 포트 매핑
docker run -p 8080:80 <이미지>

# 볼륨 마운트
docker run -v /host/path:/container/path <이미지>

# 환경 변수 설정
docker run -e MY_ENV=value <이미지>

# 환경 변수 파일로 전달
docker run --env-file .env <이미지>

# CPU 제한
docker run --cpus="4" <이미지>

# 메모리 제한
docker run --memory="8g" <이미지>

# GPU 지정
docker run --gpus '"device=0,1"' <이미지>

# 컨테이너 종료 시 자동 삭제
docker run --rm <이미지>

# 네트워크 지정
docker run --network my_network <이미지>

# 재시작 정책 설정
docker run --restart=always <이미지>

# 호스트 네트워크 사용
docker run --network=host <이미지>

# 권한 설정
docker run --privileged <이미지>

# 작업 디렉토리 지정
docker run -w /app <이미지>

# 인터랙티브 모드
docker run -it <이미지> bash

⏯️ 6. 컨테이너 시작 / 중지 / 재시작

# 컨테이너 시작
docker start <컨테이너명>

# 컨테이너 중지 (graceful)
docker stop <컨테이너명>

# 컨테이너 강제 종료
docker kill <컨테이너명>

# 컨테이너 재시작
docker restart <컨테이너명>

# 컨테이너 일시 정지
docker pause <컨테이너명>

# 컨테이너 재개
docker unpause <컨테이너명>

# 전체 실행 중 컨테이너 중지
docker stop $(docker ps -q)

📄 7. 로그

# 로그 보기
docker logs <컨테이너명>

# 실시간 로그 스트리밍
docker logs -f <컨테이너명>

# 최근 100줄만
docker logs --tail 100 <컨테이너명>

# 타임스탬프 포함
docker logs -t <컨테이너명>

# 특정 시간 이후 로그
docker logs --since 1h <컨테이너명>
docker logs --since "2024-01-01T00:00:00" <컨테이너명>

# 최근 1시간 로그 실시간으로
docker logs -f --since 1h <컨테이너명>

🔍 8. 디버깅 & 내부 접속

# 실행 중인 컨테이너에 bash 접속
docker exec -it <컨테이너명> bash

# sh로 접속 (bash 없는 이미지)
docker exec -it <컨테이너명> sh

# 특정 명령어 실행
docker exec <컨테이너명> <명령어>

# root로 접속
docker exec -u root -it <컨테이너명> bash

# 컨테이너 상세 정보 전체 출력
docker inspect <컨테이너명>

# 특정 필드만 추출
docker inspect --format '{{.State.Status}}' <컨테이너명>
docker inspect --format '{{.NetworkSettings.IPAddress}}' <컨테이너명>

# 컨테이너 내 프로세스 목록
docker top <컨테이너명>

# 파일 변경 내역 확인
docker diff <컨테이너명>

# 컨테이너에서 파일 복사 (컨테이너 → 호스트)
docker cp <컨테이너명>:/path/to/file ./local_path

# 호스트 → 컨테이너로 파일 복사
docker cp ./local_file <컨테이너명>:/path/in/container

# 컨테이너 이벤트 실시간 모니터링
docker events --filter container=<컨테이너명>

🌐 9. 네트워크

# 네트워크 목록
docker network ls

# 네트워크 생성
docker network create my_network

# 브리지 네트워크 생성
docker network create --driver bridge my_network

# 네트워크 상세 정보
docker network inspect my_network

# 컨테이너를 네트워크에 연결
docker network connect my_network <컨테이너명>

# 컨테이너를 네트워크에서 분리
docker network disconnect my_network <컨테이너명>

# 미사용 네트워크 삭제
docker network prune -f

# 네트워크 삭제
docker network rm my_network

💾 10. 볼륨

# 볼륨 목록
docker volume ls

# 볼륨 생성
docker volume create my_volume

# 볼륨 상세 정보
docker volume inspect my_volume

# 미사용 볼륨 삭제
docker volume prune -f

# 볼륨 삭제
docker volume rm my_volume

# 볼륨 전체 삭제 (주의!)
docker volume rm $(docker volume ls -q)

🧹 11. 시스템 정리 (prune)

# 컨테이너 + 이미지 + 네트워크 한 번에 정리
docker system prune -f

# 미사용 이미지까지 전부 정리 (주의!)
docker system prune -af

# 볼륨까지 포함해서 정리 (매우 주의!)
docker system prune -af --volumes

# 도커 전체 디스크 사용량 확인
docker system df

# 상세 디스크 사용량
docker system df -v

🏗️ 12. Docker Compose

# 서비스 전체 시작 (백그라운드)
docker compose up -d

# 빌드 후 시작
docker compose up -d --build

# 서비스 중지
docker compose down

# 볼륨까지 삭제하며 중지
docker compose down -v

# 특정 서비스만 시작
docker compose up -d <서비스명>

# 로그 보기
docker compose logs -f

# 특정 서비스 로그
docker compose logs -f <서비스명>

# 서비스 재시작
docker compose restart <서비스명>

# 실행 중 서비스 목록
docker compose ps

# 서비스 안에서 명령어 실행
docker compose exec <서비스명> bash

# 서비스 스케일 조정
docker compose up -d --scale web=3

# compose 파일 문법 검사
docker compose config

📦 13. Registry / Push / Pull

# Docker Hub 로그인
docker login

# 특정 레지스트리 로그인
docker login registry.example.com

# 이미지 push
docker push <이미지:태그>

# Private registry에 push
docker tag <이미지> registry.example.com/myimage:tag
docker push registry.example.com/myimage:tag

# 로그아웃
docker logout

⚙️ 14. 기타 유용한 명령어

# 도커 버전 확인
docker version

# 도커 시스템 정보
docker info

# 컨테이너 포트 매핑 확인
docker port <컨테이너명>

# 컨테이너 IP 주소 확인
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <컨테이너명>

# 실행 중 컨테이너를 이미지로 저장 (스냅샷)
docker commit <컨테이너명> <이미지:태그>

# 도커 데몬 이벤트 모니터링
docker events

# 컨테이너 종료될 때까지 대기
docker wait <컨테이너명>

# 컨테이너 종료 코드 확인
docker inspect <컨테이너명> --format='{{.State.ExitCode}}'

# 헬스체크 상태 확인
docker inspect --format='{{.State.Health.Status}}' <컨테이너명>

💡 실무 꿀팁 모음

# 모든 exited 컨테이너 삭제
docker rm $(docker ps -aq -f status=exited)

# 전체 정리 한 방에 (컨테이너 + dangling 이미지 + 네트워크)
docker system prune -f

# 특정 컨테이너 로그 파일 위치 찾기
docker inspect --format='{{.LogPath}}' <컨테이너명>

# 가장 최근에 만들어진 컨테이너 ID
docker ps -lq

# 컨테이너 환경변수 확인
docker exec <컨테이너명> env

# 컨테이너 내 특정 파일 내용 바로 보기
docker exec <컨테이너명> cat /etc/hosts

# 컨테이너 재시작 정책 확인
docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <컨테이너명>

# 실행 중 컨테이너 수 확인
docker ps -q | wc -l

# GPU 사용 중인 컨테이너 확인
docker ps --filter "status=running" --format "{{.Names}}" | \
  xargs -I{} docker inspect {} --format '{{.Name}} GPU: {{.HostConfig.DeviceRequests}}'

📌 CPU % 해석 가이드

수치 의미
100% 코어 1개 100% 사용
400% 코어 4개 풀 사용
--cpus="16" 설정 시 최대 1600%
평균 1600% 근처 CPU 병목, 조치 필요

반응형