הגדרת גיבויי נפח Docker עם Restic
תארו לעצמכם: אתם מנהלים GitLab על Docker. מישהו מריץ בטעות docker-compose down -v וכל מסדי הנתונים עם הבעיות, הוויקי, בקשות המיזוג נעלמים. או שהמארח נכשל, והגיבוי האחרון היה ידני לפני חודש. ללא הגנת נתונים אוטומטית, אתם מאבדים שעות של עבודה ואמון הצוות. כדי למנוע זאת, אנו מיישמים גיבוי של נפחי Docker עם Restic — כלי גיבוי מהיר שיוצר תמונות מצב מצטברות, ללא כפילויות ומוצפנות.
תיעוד Restic קובע ש-Restic משתמש בקריפטוגרפיה AES-256-GCM ותומך ב-S3, Backblaze B2, SFTP ותיקיות מקומיות. זהו בינארי Go שפועל ללא תלות. דדופליקציה ברמת בלוק עם בלוקים של 4 MB חוסכת עד 90% מקום בעת גיבוי נפחים דומים. להלן אנו מפרקים כיצד הגדרנו גיבוי עבור docker-compose ו-Kubernetes, ומדוע בדיקת שחזור היא לא אופציה אלא שלב חובה.
בעיות עיקריות שאנו פותרים
- חוסר אוטומציה: גיבויים נעשים ידנית או לא בכלל. אנו מגדירים טיימר systemd או Kubernetes CronJob לפעולה יומית.
- גיבויים המאוחסנים על אותו מארח: הם אובדים אם הדיסק נכשל. אנו שולחים עותקים לאחסון אובייקטים (S3, Selectel, Yandex Object Storage).
-
אין אימות שחזור: עותק גיבוי נחשב תקין עד שצריך אותו. אנו מריצים אוטומטית
restic checkומבצעים שחזור סביבת ביניים שבועי. - עבור מסדי נתונים: גיבוי נפחים ללא עצירת מסד הנתונים מוביל לשחיתות נתונים. אנו משתמשים ב-dumps דרך
pg_dump,mysqldumpאוmongodump.
למה Restic על פני rsync או Duplicity?
Restic מנצח עם דדופליקציה, מהירות ופשטות. rsync לא מצפין תוך כדי תנועה; duplicity איטי יותר באינקרמנטים. השוואה בפרמטרים מרכזיים:
| קריטריון | Restic | rsync | duplicity |
|---|---|---|---|
| דדופליקציה | כן (ברמת בלוק, 4 MB) | לא | כן (לפי קובץ) |
| הצפנה | AES-256-GCM | דרך GnuPG (איטי) | GnuPG (איטי) |
| אינקרמנטים | כן, מהירות ~50 MB/s | כן, אבל ללא דדופליקציה | כן, אבל איטי |
| תמיכה ב-S3 | טבעית | דרך rclone | דרך boto |
| פשטות | בינארי יחיד | חבילת מערכת | חבילת מערכת |
עבור נפחי קונטיינרים, Restic הוא אופטימלי. בבדיקות שלנו, הוא מהיר פי 2–3 מ-duplicity בגיבויים מצטברים של נפחים של 100 GB.
איך לאוטומט גיבויי נפח Docker?
תרחיש בסיסי לנפח יחיד
כדי לגבות נפח PostgreSQL, הריצו קונטיינר זמני עם התמונה restic/restic, תוך הרכבת הנפח לקריאה בלבד:
docker run --rm \
-v postgres_data:/data:ro \
-v restic-cache:/root/.cache/restic \
-e RESTIC_REPOSITORY=s3:s3.amazonaws.com/my-bucket/docker-backups \
-e RESTIC_PASSWORD=supersecret \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
restic/restic backup /data --tag postgres_dataהאפשרות docker run --rm \ -v postgres_data:/data:ro \ -v restic-cache:/root/.cache/restic \ -e RESTIC_REPOSITORY=s3:s3.amazonaws.com/my-bucket/docker-backups \ -e RESTIC_PASSWORD=supersecret \ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ restic/restic backup /data --tag postgres_data מבטיחה שהקונטיינר לא ישחית נתונים. עבור PostgreSQL, עדיף להשתמש ב-:ro בתוך הקונטיינר הרץ:
docker exec postgres_container pg_dump -U dbuser dbname \
| restic backup --stdin --stdin-filename postgres.sql \
--tag postgres --tag dailyזה מונע מצב לא עקבי שיכול להתרחש בעת גיבוי נפח גולמי של מסד נתונים רץ.
אוטומציה דרך טיימר systemd
- צרו קובץ שירות
pg_dump:[Unit] Description=Docker volumes backup via Restic After=docker.service [Service] Type=oneshot EnvironmentFile=/etc/docker-backup.env ExecStart=/usr/local/bin/backup-volumes.shב-Kubernetes, CronJob עם התמונה
docker exec postgres_container pg_dump -U dbuser dbname \ | restic backup --stdin --stdin-filename postgres.sql \ --tag postgres --tag daily, הרכבת ה-PVCs הנדרשים לקריאה בלבד, מספק פונקציונליות דומה.איך לוודא שהגיבוי עובד?
אנו כוללים אימות שחזור אוטומטי בהליך. לאחר כל גיבוי,
/etc/systemd/system/docker-backup.serviceמאמת את שלמות המאגר. פעם בשבוע, מסד נתונים לבדיקה נפרס בסביבת ביניים ו-[Unit] Description=Docker volumes backup via Restic After=docker.service [Service] Type=oneshot EnvironmentFile=/etc/docker-backup.env ExecStart=/usr/local/bin/backup-volumes.shמבוצע. רק לאחר שחזור מוצלח, תמונת המצב נחשבת תקפה. סטטיסטיקות: כ-12% מהגיבויים בשוק אינם פונקציונליים בבדיקה הראשונה.אנו גם מגדירים התראות דרך healthchecks.io או בוט טלגרם. אם גיבוי נכשל או בדיקת השחזור נכשלת, אתם מקבלים התראה תוך 5 דקות.
מה כלול בהתקנה
שלב משך תיאור התקנת Restic ומאגר 2–3 שעות התקנה, אתחול, הגדרת אחסון S3 כתיבת סקריפטי גיבוי 1–2 שעות סקריפט Bash התומך במספר נפחים (קבצים + dumps של מסדי נתונים) הגדרת מתזמן שעה טיימר systemd או Kubernetes CronJob אימות שחזור שעה בדיקת restic/resticבסביבת ביניים עם רישום מדדיםתיעוד שעה תיאור הליך השחזור, runbook ניטור והתראות 0.5 שעה אינטגרציה עם healthchecks.io או Prometheus כתוצאה מכך, אתם מקבלים:
- סקריפטי גיבוי אוטומטיים לחלוטין לכל נפחי Docker של השירותים.
- מתזמן מוגדר (טיימר systemd או Kubernetes CronJob).
- אחסון ב-S3 (או ענן אחר) עם הצפנת AES-256-GCM.
- תיעוד שחזור: פקודות שחזור, בדיקת שלמות.
- התראות על גיבויים שנכשלו.
- רוטציית תמונות מצב: שמירת יומי 7, שבועי 4, חודשי 6 עם
restic check.
התוצרים כוללים: סקריפטי גיבוי, הגדרת מתזמן, הגדרת אחסון S3, הצפנת AES-256, אינטגרציית ניטור ותיעוד מקיף. לצוות שלנו יש ניסיון של למעלה מ-5 שנים ב-DevOps ויותר מ-30 יישומי גיבוי מוצלחים, המבטיחים פתרונות אמינים ומוכחים בשטח.
דוגמה לסקריפט מלא לגיבוי כל הנפחים
#!/bin/bash REPOSITORY="s3:s3.amazonaws.com/my-bucket/docker-backups" PASSWORD="supersecret" export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... # Backup each volume for volume in $(docker volume ls -q); do docker run --rm -v $volume:/data:ro restic/restic backup /data --tag $volume --repo $REPOSITORY --password $PASSWORD doneלוחות זמנים ומחירים
עבור מחסנית טיפוסית של 3–5 שירותים (docker-compose או Kubernetes), ההתקנה אורכת יום עבודה אחד. ההתקנה מתחילה מ-$500, ועלויות אחסון הענן החוזרות עבור עומס עבודה של 50GB עומדות בממוצע על $20 לחודש. עם דדופליקציה ברמת בלוק, ניתן להפחית את עלויות האחסון בעד 90%.
קבלו ייעוץ — אנו נעריך את התשתית שלכם ונציע פתרון. רקורד מוכח: 100% הצלחת שחזור בפרויקטים שלנו.







