224 lines
5.1 KiB
Markdown
224 lines
5.1 KiB
Markdown
<p align="center">
|
||
<img src="images/dockervault-logo.png" alt="DockerVault logo" width="400">
|
||
</p>
|
||
<p align="center">
|
||
<b>Simple, reliable backups for Docker environments.</b>
|
||
</p>
|
||
|
||
---
|
||
|
||
## 📑 Contents
|
||
|
||
* [🚀 What is DockerVault?](#-what-is-dockervault)
|
||
* [✨ Goals](#-goals)
|
||
* [⚙️ Technology](#-technology)
|
||
* [🏗 Architecture](#-architecture)
|
||
* [📦 What DockerVault backs up](#-what-dockervault-is-expected-to-back-up)
|
||
* [🔁 Restore philosophy](#-restore-philosophy)
|
||
* [🧩 Planned Features](#-planned-features)
|
||
* [🛣 Roadmap](#-roadmap)
|
||
* [📁 Project Structure](#-project-structure)
|
||
* [🤝 Philosophy](#-philosophy)
|
||
* [📜 License](#-license)
|
||
|
||
---
|
||
|
||
## 🚀 What is DockerVault?
|
||
|
||
DockerVault is a CLI-first backup system for Docker environments.
|
||
|
||
It is designed to make backups simple, transparent, and reliable without unnecessary complexity. The goal is to provide a practical way to discover containers, identify important data, and manage backups in a structured and predictable way.
|
||
|
||
DockerVault is aimed at homelabs, self-hosted infrastructure, and small-scale server environments where control, clarity, and recoverability matter.
|
||
|
||
---
|
||
|
||
## ✨ Goals
|
||
|
||
DockerVault is being built to:
|
||
|
||
* Discover Docker containers automatically
|
||
* Identify volumes, bind mounts, and relevant configuration data
|
||
* Keep track of backup history and metadata
|
||
* Use a proven backup backend instead of reinventing backup logic
|
||
* Make restore operations easier and safer
|
||
* Stay simple enough to understand and debug
|
||
|
||
---
|
||
|
||
## ⚙️ Technology
|
||
|
||
DockerVault is planned as a modular, CLI-first tool.
|
||
|
||
### Current design direction
|
||
|
||
* **Core language:** Python
|
||
* **Backup engine:** BorgBackup
|
||
* **Metadata storage:** SQLite
|
||
* **Interface:** CLI first
|
||
* **Platform focus:** Linux Docker hosts
|
||
|
||
### Why this stack?
|
||
|
||
* **Python** makes it fast to build, maintain, and extend
|
||
* **BorgBackup** is mature, reliable, and well-suited for deduplicated backups
|
||
* **SQLite** keeps metadata simple, local, and easy to inspect
|
||
* **CLI first** keeps the project transparent and easy to debug
|
||
|
||
The project philosophy is clear: use proven tools where it makes sense, and avoid building complexity just for the sake of it.
|
||
|
||
---
|
||
|
||
## 🏗 Architecture
|
||
|
||
DockerVault follows a simple flow:
|
||
|
||
1. Scan Docker environment
|
||
2. Detect containers, volumes, bind mounts, and configs
|
||
3. Store metadata in SQLite
|
||
4. Build backup jobs from discovered data
|
||
5. Execute backups through Borg
|
||
6. Restore data when needed
|
||
|
||
More detailed architecture notes will live in `docs/architecture.md`.
|
||
|
||
---
|
||
|
||
## 📦 What DockerVault is expected to back up
|
||
|
||
DockerVault is intended to focus on the parts of Docker environments that actually matter:
|
||
|
||
* Docker volumes
|
||
* Bind mounts
|
||
* Selected configuration files
|
||
* Backup metadata
|
||
* Restore-related information
|
||
|
||
It is not intended to blindly copy everything without structure. The purpose is to know what is being backed up and why.
|
||
|
||
---
|
||
|
||
## 🔁 Restore philosophy
|
||
|
||
Backups are only useful if restore is realistic.
|
||
|
||
DockerVault is being designed with restore in mind from the beginning:
|
||
|
||
* Clear mapping between containers and stored data
|
||
* Metadata that explains relationships between services and data
|
||
* Predictable restore flow
|
||
* Minimal guesswork during recovery
|
||
|
||
The goal is not just to store backups, but to enable actual recovery.
|
||
|
||
---
|
||
|
||
## 🧩 Planned Features
|
||
|
||
### Core features
|
||
|
||
* Docker container discovery
|
||
* Volume detection
|
||
* Bind mount detection
|
||
* Backup job creation
|
||
* Borg-based backup execution
|
||
* SQLite-based metadata tracking
|
||
* Restore workflow
|
||
|
||
### Future possibilities
|
||
|
||
* Scheduled backups
|
||
* Retention policies
|
||
* Pre/post backup hooks
|
||
* E-mail notifications
|
||
* `ntfy` notifications
|
||
* Web interface
|
||
* Multi-node support
|
||
* Remote repository support
|
||
* Backup health/status reporting
|
||
* Configuration profiles
|
||
* Selective backup policies per container
|
||
|
||
---
|
||
|
||
## 🛣 Roadmap
|
||
|
||
### Phase 1 – Foundation
|
||
|
||
* Repository structure
|
||
* Documentation
|
||
* CLI skeleton
|
||
* Initial project design
|
||
|
||
### Phase 2 – Discovery
|
||
|
||
* Scan Docker environment
|
||
* Detect containers
|
||
* Detect volumes and bind mounts
|
||
|
||
### Phase 3 – Backup Engine
|
||
|
||
* Integrate BorgBackup
|
||
* Build backup job flow
|
||
* Store metadata in SQLite
|
||
|
||
### Phase 4 – Restore
|
||
|
||
* Basic restore workflow
|
||
* Restore metadata mapping
|
||
* Safer recovery process
|
||
|
||
### Phase 5 – Usability
|
||
|
||
* Better CLI commands
|
||
* Config handling
|
||
* Scheduling support
|
||
* Notifications
|
||
|
||
### Phase 6 – Expansion
|
||
|
||
* Web interface
|
||
* Multi-node support
|
||
* Advanced backup policies
|
||
|
||
---
|
||
|
||
## 📁 Project Structure
|
||
|
||
```text
|
||
dockervault/
|
||
├── cmd/
|
||
├── core/
|
||
├── scanner/
|
||
├── backup/
|
||
├── restore/
|
||
├── config/
|
||
├── database/
|
||
├── docs/
|
||
├── scripts/
|
||
├── images/
|
||
├── README.md
|
||
└── LICENSE
|
||
```
|
||
|
||
---
|
||
|
||
## 🤝 Philosophy
|
||
|
||
DockerVault is built on a few simple principles:
|
||
|
||
* Keep it simple
|
||
* Be transparent
|
||
* Avoid unnecessary complexity
|
||
* Prefer proven tools over hype
|
||
* Build something practical and maintainable
|
||
|
||
No magic. No hidden behavior. No unnecessary abstraction.
|
||
|
||
---
|
||
|
||
## 📜 License
|
||
|
||
This project is licensed under the **GNU General Public License v2.0**.
|
||
|
||
See the `LICENSE` file for details.
|