A lightweight Docker image based on Alpine Linux for automating backups of your Docker Volumes. It compresses your data into .tar.gz and automatically uploads it to a NAS or remote server via FTP or SFTP.
cron to run backups at any interval you define.lftp and openssh-client for secure offsite storage.Here's an example docker-compose.yml configuration:
version: '3.8'
services:
volume-backup:
image: napadon/volume-backup:latest
container_name: volume_backup_service
environment:
- BACKUP_PREFIX=my_data
- TZ=Asia/Bangkok
- CRON_SCHEDULE=0 2 * * *
# Retention Policy
- RETENTION_COUNT=14
# - RETENTION_DAYS=30
# NAS Upload
- UPLOAD_PROTOCOL=sftp
- NAS_HOST=192.168.1.100
- NAS_USER=nas_user
- NAS_PASS=nas_password
- NAS_DIR=/home/backups
volumes:
- /path/to/your/data:/data:ro
restart: unless-stopped
| Variable | Default Value | Description |
|---|---|---|
BACKUP_SOURCE | /data | Path inside the container to backup data from. |
BACKUP_DEST | /backup | Local path to temporarily store .tar.gz before upload. |
BACKUP_PREFIX | backup | Prefix for the generated backup file (e.g. prefix_2026...tar.gz). |
TZ | Asia/Bangkok | Timezone setting for accurate cron scheduling. |
CRON_SCHEDULE | 0 2 * * * | Cron expression defining the backup frequency. |
RETENTION_COUNT | (Empty) | Hard limit on the number of backup files to keep. (Overrides GFS on NAS if used locally) |
RETENTION_DAYS | (Empty) | Number of days to keep backup files locally. |
UPLOAD_PROTOCOL | (Empty) | Protocol to use: sftp or ftp. |
NAS_HOST | (Empty) | Hostname or IP address of the target NAS/Server. |
NAS_USER | (Empty) | Username for NAS authentication. |
NAS_PASS | (Empty) | Password for NAS authentication. |
NAS_DIR | (Empty) | Target directory on the NAS to store backups. |
Image สำหรับ Docker ขนาดเล็ก (สร้างจาก Alpine) ถูกออกแบบมาเพื่อสำรองข้อมูล (Backup) จาก Docker Volume ของคุณโดยอัตโนมัติ ระบบจะทำการบีบอัดไฟล์ให้อยู่ในรูปแบบ .tar.gz จากนั้นจะอัปโหลดไปยังหน่วยเก็บข้อมูลภายนอก (NAS) ผ่าน FTP หรือ SFTP ให้ทันที
cron ได้อย่างยืดหยุ่นด้วยรูปแบบเวลาที่ต้องการตัวอย่างการตั้งค่าไฟล์ docker-compose.yml เพื่อเรียกใช้งาน:
version: '3.8'
services:
volume-backup:
image: napadon/volume-backup:latest
container_name: volume_backup_service
environment:
- BACKUP_PREFIX=my_data # คำนำหน้าไฟล์เพื่อระบุประเภทข้อมูล
- TZ=Asia/Bangkok # ตั้งให้เวลาตรงตามทวีปเอเชีย/ไทย
- CRON_SCHEDULE=0 2 * * * # ตั้งเวลาทำงาน (ในที่นี้คือ ตี 2 ทุกวัน)
# ตั้งเงื่อนไขการเก็บไฟล์ใน NAS หรือเครื่อง (Retention Policy)
- RETENTION_COUNT=14 # เก็บไว้ 14 ชุด ถ้าเกินจะลบอันเก่าทิ้ง
# - RETENTION_DAYS=30 # (ทางเลือก) ลบไฟล์ที่เก่ากว่า 30 วัน
# การตั้งค่าเพื่ออัปโหลดลงระบบ NAS
- UPLOAD_PROTOCOL=sftp # โปรโตคอล (sftp หรือ ftp)
- NAS_HOST=192.168.1.100 # ไอพีของเซิร์ฟเวอร์สำรองข้อมูล
- NAS_USER=nas_user # ชื่อผู้ใช้งาน
- NAS_PASS=nas_password # รหัสผ่าน
- NAS_DIR=/home/backups # โฟลเดอร์ปลายทาง
volumes:
- /path/to/your/data:/data:ro # (แนะนำให้ชี้ Data แบบ Read-only เพื่อป้องกันผิดพลาด)
restart: unless-stopped
| ตัวแปร | ค่าตั้งต้น (Default) | คำอธิบาย |
|---|---|---|
BACKUP_SOURCE | /data | Path ตำแหน่งโฟลเดอร์ฝั่ง Container ที่ต้องการมัดรวม Backup |
BACKUP_DEST | /backup | Path สำหรับไว้พักไฟล์ .tar.gz ชั่วคราวก่อนส่งขึ้น NAS |
BACKUP_PREFIX | backup | ข้อความนำหน้าชื่อไฟล์ |
TZ | Asia/Bangkok | โซนเวลา เพื่อให้เข้าจังหวะกับ Cron job |
CRON_SCHEDULE | 0 2 * * * | เลขความถี่ของ Cron ตั้งกติกาทำงาน |
RETENTION_COUNT | (ไม่ระบุ) | จำนวนไฟล์รวมทั้งหมดที่จะเก็บไว้สลับลบทิ้ง (ถ้ามีจะข้ามกฎ GFS บน NAS) |
RETENTION_DAYS | (ไม่ระบุ) | จำนวนวันสูงสุดที่จะเก็บไฟล์ |
UPLOAD_PROTOCOL | (ไม่ระบุ) | ใช้สำหรับโยนทาง sftp หรือ ftp |
NAS_HOST | (ไม่ระบุ) | IP หรือ Host ของ NAS ปลายทาง |
NAS_USER | (ไม่ระบุ) | ชื่อบัญชีล็อกอิน NAS |
NAS_PASS | (ไม่ระบุ) | รหัสผ่าน NAS |
NAS_DIR | (ไม่ระบุ) | ไดเรกทอรีบนเครื่อง NAS เพื่อเก็บข้อมูล |
Author: Napadon (AI Generated) License: MIT
Content type
Image
Digest
sha256:f2a3d98a2…
Size
12.8 MB
Last updated
8 months ago
docker pull napadon/volume-backup