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