도커 기본개념 및 필수명령어

Heeyoung Lee·2025년 8월 22일

서버

목록 보기
3/3

목적: 현장에서 바로 써먹을 수 있도록 필수 명령어와 디스크 부족 시 조치 절차를 단계별로 정리했습니다.
용어 정리는 각 섹션 하단 “개념 요약”에 포함했습니다.


1. 핵심 개념 요약

  • 이미지(Image): 애플리케이션 실행에 필요한 스냅샷. 읽기 전용.
  • 컨테이너(Container): 이미지를 실행한 프로세스 인스턴스. 상태와 로그가 생김.
  • 볼륨(Volume): 컨테이너와 분리된 영속 데이터 저장소(예: DB, Elasticsearch 데이터).
  • 네트워크(Network): 컨테이너 간 통신용 가상 네트워크.
  • Compose: 여러 서비스를 코드로 정의·실행하는 도구(docker compose).

2. 컨테이너 명령어

# 목록
docker ps                 # 실행 중 컨테이너
docker ps -a              # 전체(정지 포함)

# 제어
docker start <name|id>    # 시작
docker stop <name|id>     # 중지
docker restart <name|id>  # 재시작
docker rm <name|id>       # 삭제(정지 상태 필요)
docker rm -f <name|id>    # 강제 삭제(실행 중 포함)

# 내부 확인/접속
docker logs -f <name|id>                  # 실시간 로그
docker exec -it <name|id> bash            # 쉘 접속
docker top <name|id>                      # 컨테이너 내부 프로세스
docker inspect <name|id>                  # 상세 정보(JSON)

# 보기 좋게 출력
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

3. 이미지 명령어

docker images                 # 이미지 목록
docker images -a              # 중간 이미지 포함
docker images --digests       # Digest(SHA256) 표시

docker pull repo:tag          # 이미지 받기
docker rmi repo:tag           # 이미지 삭제
docker rmi -f repo:tag        # 강제 삭제

4. 볼륨 명령어

docker volume ls                          # 볼륨 목록
docker volume inspect <volume>            # 상세(마운트 경로 등)
docker ps -a --filter volume=<volume>     # 해당 볼륨을 쓰는 컨테이너 찾기
docker volume rm <volume>                 # 볼륨 삭제(참조 없어야 가능)

주의: 볼륨 삭제는 데이터 영구 삭제입니다. DB/Elasticsearch 등은 사전에 백업을 권장합니다.


5. 네트워크 명령어

docker network ls                 # 네트워크 목록
docker network inspect <network>  # 상세
docker network rm <network>       # 삭제
docker network prune              # 미사용 네트워크 일괄 삭제

Compose로 컨테이너를 다시 올리면 networks: 정의에 따라 자동 생성됩니다.
다만 external: true 네트워크는 미리 docker network create <name> 필요.


6. 시스템/정리 명령어

docker system df                           # 도커가 사용 중인 디스크 요약
docker system prune -f                     # 미사용 리소스 정리(이미지 제외)
docker system prune -a -f                  # 미사용 이미지 포함 정리
docker system prune -a -f --volumes        # 미사용 볼륨까지(강력, 데이터 유실 주의)

7. Docker Compose 기본

docker compose up -d         # 백그라운드 실행
docker compose down          # 컨테이너/네트워크 종료·삭제
docker compose down -v       # 위 + 연결 볼륨 삭제(데이터 유실 주의)
docker compose ps            # Compose 관리 컨테이너 상태
docker compose logs -f       # 전체 서비스 로그 추적

8. 디스크 부족(루트 100%) 복구 플레이북

8.1 증상·원인 확인

df -h /                 # 루트 파티션 사용량
docker system df        # 도커 리소스별 사용량 요약

# 대용량 디렉터리 찾기
sudo du -ahx / | sort -rh | head -n 20
sudo du -sh /var/log/* | sort -rh | head
sudo du -sh /var/lib/docker/* | sort -rh | head
sudo du -sh /var/lib/docker/volumes/* | sort -rh | head

자주 보이는 원인

  • /var/lib/docker/volumes 내 데이터 볼륨 폭증(예: Elasticsearch 인덱스)
  • 오래된 컨테이너/이미지/빌드 캐시 미정리
  • /var/log 저널 로그 과다
  • /tmp 임시파일 과다

8.2 응급 여유 공간 확보(안전 순서)

# /tmp 정리
sudo rm -rf /tmp/* /tmp/.[!.]* /tmp/..?* 2>/dev/null

# systemd 저널 로그 정리(둘 중 하나)
sudo journalctl --vacuum-time=7d
# 또는
sudo journalctl --vacuum-size=200M

# 패키지 캐시 정리
sudo dnf clean all   # RHEL8/Rocky/Alma/CentOS8
# 또는
sudo yum clean all   # CentOS7
# 또는
sudo apt-get clean   # Ubuntu/Debian

# 도커 미사용 리소스 정리(점진적으로)
docker system prune -f
docker system prune -a -f
# 정말 급할 때만(미사용 볼륨까지)
docker system prune -a -f --volumes

8.3 특정 볼륨이 원인일 때

예: apm-server_es_data(Elasticsearch 데이터) 용량 과다

  1. 누가 붙잡고 있는지 확인
docker ps -a --filter volume=apm-server_es_data
docker volume inspect apm-server_es_data
  1. 참조 컨테이너 정지/삭제 후 볼륨 삭제
docker stop <container>
docker rm <container>                 # compose라면 해당 디렉터리에서 docker compose down
docker volume rm apm-server_es_data   # 데이터 영구 삭제(주의)
  1. 여전히 “in use”면 데몬 재시작 후 재시도
sudo systemctl restart docker
docker volume rm apm-server_es_data
  1. 최후의 응급(권장하지 않음, 도커 중지 후 실제 데이터만 삭제)
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/volumes/apm-server_es_data/_data/*
sudo systemctl start docker

운영 데이터 유지가 필요하면 Kibana/ES에서 오래된 인덱스만 삭제하거나 ILM(보존 기간/롤오버) 정책을 적용해 자동 정리하는 것을 권장합니다.

8.4 Elasticsearch를 쓰는 경우의 관리 팁

  • 오래된 인덱스 삭제 예시(Kibana Dev Tools)
GET _cat/indices?v
DELETE myindex-2025.07.01
  • ILM(인덱스 수명주기) 정책으로 자동 삭제/롤오버 설정 권장

9. 점검·모니터링에 유용한 명령어

# 컨테이너 상태 요약(보기 좋게)
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

# 리소스 실시간 사용량
docker stats

# 디스크·도커 요약 리포트
df -h /
docker system df

10. 운영 안전 수칙

  • Compose로 일관 관리: docker compose up/down 기준 운용
  • 데이터 정책: DB/ES는 보존 기간·ILM·자동 삭제 정책 필수
  • 리소스 제한: 필요 시 컨테이너별 메모리/CPU 제한 설정
  • 정기 점검: df -h, docker system df, 저널 로그 진공(journalctl --vacuum-*) 주기 실행

부록: 현장 체크리스트(요약)

  1. df -h /, docker system df 로 현황 파악
  2. /tmp, 저널 로그, 패키지 캐시 정리
  3. docker system prune 단계적 실행
  4. du -sh /var/lib/docker/* 로 대형 원인 특정
  5. 볼륨이 문제면 참조 컨테이너 제거 후 볼륨 삭제
  6. 필요 시 도커 데몬 재시작
  7. 운영이라면 삭제 대신 정책(ILM/보존기간)으로 자동 정리

0개의 댓글