반응형
자주 쓰는 것, 알아두면 좋은 것, 실무에서 많이 찾는 것 전부 정리
📊 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 병목, 조치 필요 |
반응형