Skip to content

Commit 9111376

Browse files
committed
Add a global docker cleanup service
1 parent 74b85fd commit 9111376

File tree

5 files changed

+79
-511
lines changed

5 files changed

+79
-511
lines changed

docker-compose.prod.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,46 @@ services:
189189
max_attempts: 3
190190
window: 120s
191191

192+
# Global Docker cleanup service - runs on ALL nodes (managers + workers)
193+
# This ensures images, containers, and build cache are cleaned on every node,
194+
# not just managers where the Celery cleanup tasks run.
195+
# Security note: Uses minimal docker:24-cli image with only prune commands.
196+
docker-cleanup:
197+
image: docker:24-cli
198+
user: root
199+
volumes:
200+
- /var/run/docker.sock:/var/run/docker.sock
201+
# Run cleanup every 6 hours: prune containers, dangling images, and build cache
202+
# Uses alpine's built-in sleep; runs indefinitely
203+
command: |
204+
sh -c 'while true; do
205+
echo "[$(date)] Starting Docker cleanup on node..."
206+
echo "Pruning stopped containers..."
207+
docker container prune -f
208+
echo "Pruning dangling images..."
209+
docker image prune -f
210+
echo "Pruning build cache (older than 168h)..."
211+
docker builder prune -f --filter "until=168h" || true
212+
echo "Pruning unused volumes..."
213+
docker volume prune -f || true
214+
echo "[$(date)] Cleanup complete. Sleeping 6 hours..."
215+
sleep 21600
216+
done'
217+
deploy:
218+
mode: global
219+
resources:
220+
reservations:
221+
cpus: "0.1"
222+
memory: 50M
223+
limits:
224+
cpus: "0.5"
225+
memory: 100M
226+
restart_policy:
227+
condition: on-failure
228+
delay: 60s
229+
max_attempts: 3
230+
window: 300s
231+
192232
redis:
193233
image: redis:7-alpine
194234
volumes:

docker-compose.staging.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,45 @@ services:
214214
max_attempts: 3
215215
window: 120s
216216

217+
# Global Docker cleanup service - runs on ALL nodes (managers + workers)
218+
# This ensures images, containers, and build cache are cleaned on every node,
219+
# not just managers where the Celery cleanup tasks run.
220+
# Security note: Uses minimal docker:24-cli image with only prune commands.
221+
docker-cleanup:
222+
image: docker:24-cli
223+
user: root
224+
volumes:
225+
- /var/run/docker.sock:/var/run/docker.sock
226+
# Run cleanup every 6 hours: prune containers, dangling images, and build cache
227+
command: |
228+
sh -c 'while true; do
229+
echo "[$(date)] Starting Docker cleanup on node..."
230+
echo "Pruning stopped containers..."
231+
docker container prune -f
232+
echo "Pruning dangling images..."
233+
docker image prune -f
234+
echo "Pruning build cache (older than 168h)..."
235+
docker builder prune -f --filter "until=168h" || true
236+
echo "Pruning unused volumes..."
237+
docker volume prune -f || true
238+
echo "[$(date)] Cleanup complete. Sleeping 6 hours..."
239+
sleep 21600
240+
done'
241+
deploy:
242+
mode: global # Run on EVERY node in the swarm
243+
resources:
244+
reservations:
245+
cpus: "0.1"
246+
memory: 50M
247+
limits:
248+
cpus: "0.5"
249+
memory: 100M
250+
restart_policy:
251+
condition: on-failure
252+
delay: 60s
253+
max_attempts: 3
254+
window: 300s
255+
217256
postgres:
218257
image: postgis/postgis:16-3.4
219258
environment:

gefapi/celery.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ def make_celery(app):
5555
"gefapi.tasks.docker_completed_monitoring.monitor_completed_docker_services": {
5656
"queue": "build"
5757
},
58-
# Docker resource cleanup task - run on build queue with Docker access
59-
"gefapi.tasks.docker_resource_cleanup.cleanup_docker_build_cache": {
60-
"queue": "build"
61-
},
6258
# Stats cache refresh tasks - run on default queue
6359
"gefapi.tasks.stats_cache_refresh.refresh_dashboard_stats_cache": {
6460
"queue": "default"
@@ -130,11 +126,6 @@ def make_celery(app):
130126
"schedule": 180.0, # Every 3 minutes - check for completed services
131127
"options": {"queue": "build"}, # Run on build queue with Docker access
132128
},
133-
"cleanup-docker-build-cache": {
134-
"task": "gefapi.tasks.docker_resource_cleanup.cleanup_docker_build_cache",
135-
"schedule": 604800.0, # Every week (7 days = 604800 seconds)
136-
"options": {"queue": "build"}, # Run on build queue with Docker access
137-
},
138129
# Stats cache refresh tasks for performance optimization
139130
"refresh-dashboard-stats-cache": {
140131
"task": "gefapi.tasks.stats_cache_refresh.refresh_dashboard_stats_cache",

gefapi/tasks/docker_resource_cleanup.py

Lines changed: 0 additions & 207 deletions
This file was deleted.

0 commit comments

Comments
 (0)