Docker 환경에서 컨테이너 생성 및 실행, 이미지 관리, 네트워크/볼륨 처리, 시스템 자원 정리 및 Docker Compose 사용 시 자주 사용하는 핵심 명령어 모음입니다.


1. 컨테이너 생성 및 실행 (Container Lifecycle)

컨테이너 생성 및 실행 (docker run)

# 기본 실행 (데몬 방식 백그라운드 -d)
docker run -d --name my-nginx -p 80:80 nginx

# 대화형 인터랙티브 터미널 접속 실행 (-it)
docker run -it --name ubuntu-test ubuntu:22.04 /bin/bash

# 컨테이너 종료 시 자동 삭제 (--rm)
docker run --rm -it python:3.10 python -c "print('Hello Docker')"

# 환경 변수 전달 (-e) 및 볼륨 마운트 (-v)
docker run -d --name my-db \
  -e MYSQL_ROOT_PASSWORD=secret \
  -v /host/data:/var/lib/mysql \
  -p 3306:3306 mysql:8.0

컨테이너 상태 조회 (docker ps)

docker ps                   # 현재 실행 중인 컨테이너 목록
docker ps -a                # 종료된 컨테이너를 포함한 모든 컨테이너 목록
docker ps -q                # 컨테이너 ID만 출력

컨테이너 제어 (시작 / 중지 / 재시작 / 삭제)

docker start my-nginx       # 정지된 컨테이너 시작
docker stop my-nginx        # 실행 중인 컨테이너 안전 종료 (SIGTERM)
docker kill my-nginx        # 강제 종료 (SIGKILL)
docker restart my-nginx     # 컨테이너 재시작

docker rm my-nginx          # 중지된 컨테이너 삭제
docker rm -f my-nginx       # 실행 중인 컨테이너 강제 삭제
docker rm $(docker ps -aq)  # 모든 중지된 컨테이너 일괄 삭제

2. 컨테이너 접속 및 내부 상태 확인

실행 중인 컨테이너 명령 실행 및 접속

# 실행 중인 컨테이너의 bash/sh 터미널 접속
docker exec -it my-nginx /bin/bash

# 접속하지 않고 컨테이너 내부 명령 단발성 실행
docker exec my-nginx ls -la /usr/share/nginx/html

로그 확인 (docker logs)

docker logs my-nginx        # 전체 로그 출력
docker logs -f my-nginx     # 실시간 로그 스트리밍 (Tail -f 개념)
docker logs --tail 100 -f my-nginx  # 최근 100줄 출력 후 실시간 스트리밍
docker logs --timestamps my-nginx    # 타임스탬프와 함께 로그 출력

상태 모니터링 & 세부 정보 조회

docker stats                # 모든 실행 중인 컨테이너 CPU/RAM/네트워크 실시간 모니터링
docker stats my-nginx       # 특정 컨테이너 리소스 모니터링
docker top my-nginx         # 컨테이너 내부 실행 중인 프로세스 목록
docker inspect my-nginx     # 컨테이너의 상세 메타데이터(IP, 바인드 마운트, 환경변수 등) JSON 출력

3. 도커 이미지 관리 (Image Management)

이미지 조회 및 검색

docker images               # 다운로드된 이미지 목록 출력
docker search nginx         # Docker Hub에서 이미지 검색

이미지 빌드 / 다운로드 / 삭제

# Docker Hub에서 이미지 다운로드
docker pull ubuntu:22.04

# Dockerfile 기반 이미지 빌드
docker build -t my-app:v1.0 .
docker build --no-cache -t my-app:v1.0 .  # 캐시 없이 깨끗하게 빌드

# 이미지 태그 지정 및 푸시
docker tag my-app:v1.0 myregistry.com/my-app:v1.0
docker push myregistry.com/my-app:v1.0

# 이미지 삭제
docker rmi ubuntu:22.04
docker rmi -f my-app:v1.0   # 강제 삭제
docker rmi $(docker images -f "dangling=true" -q) # 태그 없는 댄글링(Dangling) 이미지 삭제

4. 볼륨 & 네트워크 관리

볼륨 (Volume) 관리

docker volume ls            # 볼륨 목록 조회
docker volume create my-vol # 새 볼륨 생성
docker volume inspect my-vol# 볼륨 저장 경로 및 정보 확인
docker volume rm my-vol     # 볼륨 삭제
docker volume prune         # 사용하지 않는 모든 볼륨 정리

네트워크 (Network) 관리

docker network ls           # 네트워크 목록 조회
docker network create my-net# 사용자 정의 브릿지 네트워크 생성
docker network inspect my-net# 네트워크 연결 정보 및 IP 확인
docker network connect my-net my-container # 컨테이너를 특정 네트워크에 연결
docker network disconnect my-net my-container # 네트워크 연결 해제
docker network rm my-net    # 네트워크 삭제

5. 시스템 청소 및 디스크 자원 정리 (Cleanup)

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

# 미사용 자원(중지된 컨테이너, 미사용 네트워크, 댄글링 이미지 등) 일괄 정리
docker system prune

# 미사용 볼륨 및 사용되지 않는 모든 이미지까지 포함하여 완전 정리 (주의!)
docker system prune -a --volumes

6. 파일 복사 및 백업 / 아카이브

컨테이너 ↔ 호스트 간 파일 복사 (docker cp)

# 호스트 파일 -> 컨테이너 내부로 복사
docker cp ./index.html my-nginx:/usr/share/nginx/html/index.html

# 컨테이너 파일 -> 호스트로 복사
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

이미지 파일 백업 / 로드 (save & load)

# 이미지를 tar 압축 파일로 저장 (폐쇄망 전송용)
docker save -o my-app.tar my-app:v1.0

# tar 아카이브 파일에서 이미지 복원
docker load -i my-app.tar

7. Docker Compose 주요 명령어

docker-compose v2 표준인 docker compose 명령어 사용 기준입니다.

# 백그라운드 서비스 시작 및 빌드 함께 수행
docker compose up -d --build

# 서비스 상태 확인
docker compose ps

# 서비스 로그 실시간 확인
docker compose logs -f [service_name]

# 특정 서비스 컨테이너 명령 실행
docker compose exec app bash

# 서비스 종료 및 컨테이너/네트워크 제거
docker compose down

# 서비스 종료 시 볼륨까지 함께 제거
docker compose down -v

# 서비스 재시작
docker compose restart [service_name]

💡 자주 쓰는 명령어 원라이너 팁

상황명령어
모든 정지된 컨테이너 한 번에 삭제docker container prune -f
모든 멈춘 컨테이너 + 미사용 이미지 삭제docker system prune -a -f
컨테이너 IP 주소 빠르게 확인docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
특정 컨테이너 로그의 마지막 50줄 실시간 보기docker logs --tail 50 -f <container_name>

마무리

Docker를 활용한 서비스 구축 및 문제 해결 시 위 명령어들을 조합하여 사용하면 컨테이너 환경을 효율적으로 다룰 수 있습니다.