Docker
Docker prune 실행 전에 이미지 목록을 먼저 보자
docker prune은 편하지만 잘못하면 필요한 이미지를 삭제할 수 있다.
Docker prune이 위험한 이유
Docker는 사용하다 보면 쌓인 이미지와 컨테이너로 디스크가 가득 찬다. prune은 이들을 한 번에 정리하는 명령어다:
docker system prune
편하지만 위험하다. 예상치 못하게 필요한 이미지를 삭제할 수 있다.
먼저 확인하기
prune을 실행하기 전에 현재 상태를 보자:
# 사용 중인 이미지
docker images
# 더 상세한 정보
docker images --all
docker images --digests
# 정지된 컨테이너
docker ps -a
# 미사용 이미지만
docker images --filter "dangling=true"
Dangling 이미지와 Tag 없는 이미지의 차이
- Dangling: 태그가 없고 컨테이너가 사용하지 않는 이미지
- Untagged: 여러 버전이 있을 때 이전 버전
# Dangling만 삭제
docker image prune
# 사용하지 않는 모든 이미지 삭제 (-a)
docker image prune -a
-a 옵션은 주의해야 한다. 최근에 사용한 이미지도 삭제될 수 있다.
단계적으로 정리하기
안전하게 정리하려면:
- 정지된 컨테이너 삭제
docker container prune
- Dangling 이미지 삭제
docker image prune
- 사용하지 않는 이미지 확인
docker images --filter "reference=<image>:<tag>"
- 필요하면 수동 삭제
docker rmi <image_id>
전체 정리하기
정말 필요하면:
docker system prune -a --volumes
하지만 이건 거의 모든 이미지를 삭제한다. 백업 후 실행하자.
내 실수
프로덕션 환경에서 development 이미지가 많다고 무심코 prune -a를 실행했다가, 최근에 배포한 이미지도 삭제되어서 다시 빌드해야 했다. 그 이후로는 항상 먼저 docker images를 본다.
정리 스크립트
자주 하는 정리는 스크립트로:
#!/bin/bash
# Dangling 컨테이너와 이미지만 정리
docker container prune -f
docker image prune -f