Table of Contents
왜 자동화된 도커 Cleanup은 Disk Space Management에 필수적입니다.
Docker 컨테이너는 애플리케이션 개발, 테스트 및 배포를위한 경량, 일관된 환경을 제공합니다. 그러나, 컨테이너를 신속하게 회전하고 찢어 버리는 편의는 비용에 있습니다. 디스크 bloat. 시간이 지남에 따라, 이미지가 중단, 컨테이너, 사용되지 않은 볼륨, 그리고 왼쪽으로 빌드 캐시 축적, 소모 귀 디스크 공간을 구축합니다. 왼쪽 체크 아웃,이 절곡은 성능이 향상 될 수 있으며, 배포 실패, 심지어 시스템 정전. Autom cleanupating 저장소뿐만 아니라 저장소를 유지하지만, 보관할 수 있습니다.
단일 개발자 워크스테이션은 ]unused Docker image의 기가 바이트를 수집할 수 있습니다. 컨테이너가 자주 업데이트되거나 교체되는 생산 환경에서는 문제가 빠르게 확장됩니다. 수동 정리는 오류 프로엔드이며 종종 무시됩니다. 자동화된 계획된 Pruning 전략을 구현함으로써 가장 중요한 요소들을 위한 추측과 무료 리소스를 제거하십시오.
Docker의 Cleanup Utilities에 대한 이해
Docker는 사용하지 않는 데이터를 제거하기위한 명령의 모음을 제공합니다. 가장 강력한 것은 ]이며 컨테이너, 이미지, 볼륨 및 네트워크를 대상으로 할 수 있습니다. 키 옵션을 깰 수 있습니다.
- – 모든 컨테이너, 모든 dangling 이미지 및 사용하지 않는 네트워크 제거.
- - 모든 사용하지 않은 이미지 제거 (단지 담합 하나), 어떤 컨테이너에 의해 참조되지 않는 이미지 포함.
- - 또한 사용하지 않는 볼륨을 prunes (기본 볼륨이 제거되지 않음).
- - 모든 플래그를 결합: 확인없이 힘 제거, 모든 사용되지 않는 이미지, 볼륨. 이것은 청소를위한 핵 옵션입니다.
더 많은 과립 제어를 위해, 도커는 별도의 명령을 제공합니다: ], ], ], ]. 각 필터를 받아들입니다 (예를들면, ]) 특정 시간보다 오래된 리소스에 대한 탈취.
Cron 기반 자동화를 위한 Step-by-Step Setup
Linux 시스템에서 cron은 작업 재발을 위한 가장 간단한 스케줄링 도구로 유지됩니다. Docker 정리를 자동화하려면, crontab에서 몇 줄만 필요 합니다.
1. 도커 명령 경로 검증
Cron 작업은 제한된 환경으로 실행됩니다. 실행하여 ]의 전체 경로 결정:
which docker
일반적으로이 반환 . cron 명령의 경로 사용.
2. Crontab 편집
실행:
crontab -e
첫 번째 시간이라면 편집기를 선택하기 위해 프롬프트됩니다. 다음과 같은 라인을 추가하여 매일 2:00 오전:
0 2 * * * /usr/bin/docker system prune -af --volumes > /dev/null 2>&1
는 출력을 가진 메일함을 채우기 위해 stdout과 stderr를 리디렉션합니다. 필요한 일정을 조정합니다 (예: ] 매주).
3. 작업 테스트
cron에 의존하기 전에, 명령을 수동으로 실행하여 예상대로 작동하도록:
sudo /usr/bin/docker system prune -af --volumes
비 루트 도커 설치를 사용 하는 경우, ]을 추가 해야 합니다 또는 그룹에 있는 사용자로 cron 작업을 실행할 수 있습니다.
Systemd Timers를 통한 자동화
cron은 많은 것에 충분하지만, systemd 타이머는 더 나은 로깅, 의존성 처리 및 init 시스템의 나머지와 통합을 제공합니다. Docker Cleanup의 타이머를 만드는 방법은 다음과 같습니다.
1. 서비스 단위를 창조하십시오
로 다음을 저장:
[Unit]
Description=Docker system prune
Wants=docker.service
After=docker.service
[Service]
Type=oneshot
ExecStart=/usr/bin/docker system prune -af --volumes
User=root
StandardOutput=journal
2. 타이머 단위를 창조하십시오
로 저장:
[Unit]
Description=Run Docker cleanup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
3. 타이머를 활성화하고 시작하십시오
sudo systemctl daemon-reload
sudo systemctl enable docker-cleanup.timer
sudo systemctl start docker-cleanup.timer
로 검증합니다. 이 접근법은 체계적인 저널에 출력하여 정리 실행을 쉽게 할 수 있도록 합니다.
Retention Policies에 대한 Cleanup 필터 구성
공격적인 실행은 대부분의 개발 환경에 안전하지만 생산 시스템은 ]retention policy]이 필요할 수 있습니다. 예를 들어, 또는 ]]로 태그를 보관하고 싶거나 48시간 이상 리소스를 제거 할 수 있습니다.
필터 로 나이
24시간 이상 사용되지 않는 이미지와 용기를 갖기 위해:
docker system prune -af --filter "until=24h" --volumes
필터는 이미지와 용기 모두 작동. ]과 결합하여 더 복잡한 규칙을 위한 여러 번.
특정 리소스 제외
Docker는 내장 무시 목록이 없지만 제거를 방지하기 위해 라벨을 사용할 수 있습니다. 라벨 중요한 컨테이너 또는 이미지 (예 : ])를 사용하여 부정적인 라벨 필터 (]에서 지원되지 않음)를 사용하십시오. 워크 라운드는 ]]를 deletion 전에 라벨을 검사하는 사용자 정의 스크립트와 결합하는 것입니다. 대안으로, [FLT:][FLT:]][FLT:]]][FLT:]]][FLT:]]]][FLT:]]][FLT:]]][FLT:[F]]]]]]]][F[FLT:[F]]]]]]]]]]]][F[F[F[F[F[F]]]]]]]]]]]]]]][F[F[F[F[F[F[F[F[F]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]][
Disk Space 및 Cleanup의 효과적인 모니터링
자동화는 모니터링으로만 좋습니다. 각 정리 후에 디스크 사용을 추적하는 경고를 설정합니다. 간단한 접근법은 다음과 같습니다.
- cron 작업에서 결과를 기록합니다.
- ] docker-system-resource-influx] 를 사용하여 InfluxDB 또는 Prometheus 의 메트릭을 보내도록 합니다.
- ]Datadog] 또는 ]New Relic]를 사용하여 Docker 저장을 시각화합니다.
정리가 실행되지만 디스크 사용량이 높을 경우, ]를 사용하여 공간이 소모되는지 확인하십시오. 일반적인 culprits는 CI 시스템 또는 대형 볼륨에서 캐시를 구축하여 컨테이너를 중단함으로써 여전히 참조되지 않습니다.
생산 환경을위한 모범 사례
1. 항상 단계 접근을 사용하십시오
]를 사용하지 않는 ] 플래그 (제거되는 것을 볼 수 있음)를 사용하여 매주 건식 실행을 시작합니다. 자동화된 삭제를 가능하게 하기 전에 출력을 검토하십시오.
2. CI/CD 파이프 라인과의 협조
빌드 시스템이 많은 임시 이미지를 생성하면 빌드 또는 낮은 ‐traffic 창에서 일정을 실행합니다. 빌드가 여전히 사용중인 중간 층의 사고 제거를 방지하는 동안 실행을 피하십시오.
3. 백업 긴요한 자료
데이터베이스 또는 사용자 업로드를 포함하는 볼륨은 공격적인 볼륨 푸딩 전에 백업되어야 합니다. 와 같은 도커 볼륨 관리 도구를 사용하여 마운트 외부 스토리지를 바인딩하여 prune에 영향을 미치지 않습니다.
4. Non-Root 사용자로 Pruning 실행
보안을 위해 필요한 경우 루트로 cron 작업을 실행하십시오. ]] 그룹에 사용자를 추가하고 ]]없이 작업을 실행하십시오. 그러나 ] 그룹에서 사용자가 호스트에 효과적으로 접근 할 수 있다는 것을주의하십시오. 환경의 위험을 평가하십시오.
5. 로그 정리 활동
] 대신 로그 파일로 출력을 다시 입력하여 감사:
0 2 * * * /usr/bin/docker system prune -af --volumes >> /var/log/docker-cleanup.log 2>&1
오류 또는 예상치 못한 제거에 대한 로그를 정기적으로 확인합니다.
일반적인 Pitfalls 및 Them을 방지하는 방법
- Misssing running containers data: ] 플래그는 미래의 빌드에 필요한 중간 레이어를 포함하여 모든 사용하지 않는 이미지를 제거합니다. 자주 재건하면 짧은 ] 필터 또는 실행 ] 없이 ]를 고려하십시오.
- ] 중요한 state: 기본적으로 ]]가 ]] 플래그가 사용되지 않는 볼륨을 제거하지 않습니다. 특정 볼륨이 영구적인 데이터가 없는 경우 플래그만 추가합니다.
- 네트워크 prune 깨는 컨테이너 연결: ] 사용하지 않는 네트워크를 제거한다. 사용자 정의 네트워크가 더 이상 어떤 컨테이너에 의해 참조되지 않는 경우, 그것은 제거 될 것입니다, 잠재적으로 미래의 컨테이너 시작을 파괴. 당신이 Swarm에 오버레이 네트워크를 사용하는 경우이 유지.
- Cron 환경 문제: Docker는 cron 실행시 PATH에 있을 수 없습니다. 항상 이진에 전체 경로를 사용합니다.
대체 도구 및 Approaches
기본 Docker 명령이 가장 필요한 경우, 몇몇 타사 도구는 고급 기능을 제공합니다:
- Watchtower] ] – 자동 실행 컨테이너를 업데이트하고 업데이트 후 오래된 이미지를 정리할 수 있습니다.
- Portainer]] ]] – 예정된 정리 기능을 포함하는 Docker 관리 웹 UI.
- docker builder prune] ] – 특히 대상은 CI/CD 파이프라인에서 거대할 수 있는 캐시를 구축합니다.
쿠버네티스 환경의 경우 kubelet 쓰레기 수집]과 같은 도구 Kured 또는 ]Descheduler] 노드 수준의 정리를 고려하십시오.
관련 기사
자동 도킹 도커 컨테이너 정리는 건강하고 효율적인 도커 호스트를 유지하기위한 간단한하지만 중요한 연습입니다. cron, systemd 타이머 또는 타사 도구를 선택하면 키는 필요한 데이터를 제거하는 위험에 대한 디스크 절약을 균형으로 정기적으로 실행하는 것입니다. 필터와 로그로 정기적으로 시작하여 일정을 자신감을 자라냅니다. 자동화 된 정리를 디스크 작업 루틴으로 통합하면, 당신은 그 공간에 공간에 공간을 확보하고, 안전하게 유지하고, 컨테이너를 안전하게 유지하고, 안전하게 유지 할 수 있도록합니다.