Skip to main content

Uruchamianie środowisk dynadock + Caddy w izolowanych VM tworzonych przez libvirt/KVM.

Project description

dockvirt

PyPI version License: Apache 2.0

Twórz lekkie, izolowane środowiska deweloperskie za pomocą jednego polecenia.

dockvirt to narzędzie CLI, które automatyzuje proces tworzenia maszyn wirtualnych (VM) z wykorzystaniem libvirt/KVM. Umożliwia błyskawiczne uruchamianie aplikacji w kontenerach Docker, z prekonfigurowanym reverse proxy (Caddy), w pełni izolowanym od Twojego systemu operacyjnego.


🤔 Dlaczego dockvirt?

Pomysł na dockvirt narodził się z potrzeby stworzenia prostego, ale potężnego narzędzia do zarządzania środowiskami deweloperskimi, które łączyłoby zalety konteneryzacji (Docker) i wirtualizacji (KVM). Celem było stworzenie rozwiązania, które:

  • Zapewnia pełną izolację: W przeciwieństwie do samego Dockera, dockvirt uruchamia kontenery wewnątrz w pełni odizolowanej maszyny wirtualnej, co eliminuje problemy z konfliktami zależności, portów czy konfiguracji sieciowej na maszynie hosta.
  • Jest lekkie i szybkie: Dzięki wykorzystaniu cloud-init i obrazów chmurowych, proces tworzenia i konfiguracji VM jest zautomatyzowany i trwa zaledwie chwilę.
  • Daje pełną kontrolę: W odróżnieniu od narzędzi takich jak Multipass, dockvirt opiera się na standardowym ekosystemie libvirt, dając zaawansowanym użytkownikom pełną kontrolę nad każdym aspektem maszyny wirtualnej.

🆚 Porównanie z innymi narzędziami

Narzędzie Główne zalety Główne wady
dockvirt Pełna izolacja (VM), prostota, automatyzacja Wymaga KVM (tylko Linux)
Docker Compose Szybkość, prostota, duża popularność Brak pełnej izolacji od systemu hosta
Vagrant Wsparcie dla wielu providerów, elastyczność Wolniejszy start, bardziej złożona konfiguracja
Multipass Bardzo prosty w użyciu, dobra integracja z Ubuntu Ograniczona kontrola, silne powiązanie z Canonical

🚀 Główne funkcje

  • Automatyzacja od A do Z: Tworzenie, konfigurowanie i usuwanie VM za pomocą prostych poleceń.
  • Uniwersalność: Działa na popularnych dystrybucjach Linuksa (Ubuntu, Fedora i inne).
  • Elastyczność: Pełna kontrola nad konfiguracją VM (RAM, CPU, dysk).
  • Prekonfigurowane środowisko: Automatyczna instalacja Dockera i Caddy wewnątrz VM.
  • Izolacja: Każde środowisko działa w oddzielnej maszynie wirtualnej.

🔧 Wymagania

  • System operacyjny Linux z obsługą KVM.
  • Zainstalowane pakiety: qemu-kvm, libvirt-daemon-system, virt-manager, cloud-image-utils.
  • Obraz chmurowy (.qcow2) dla wybranej dystrybucji (np. Ubuntu 22.04, Fedora Cloud Base).

⚙️ Instalacja

  1. Zainstaluj z PyPI:

    pip install dockvirt
    
  2. Lub zainstaluj z repozytorium (dla deweloperów):

    git clone https://github.com/dynapsys/dockvirt.git
    cd dockvirt
    make install
    

🏗️ Jak to działa?

Przepływ procesu tworzenia VM

graph TD
    A[dockvirt up] --> B{Czy istnieje config.yaml?}
    B -->|Nie| C[Utwórz domyślny config.yaml]
    B -->|Tak| D[Wczytaj konfigurację]
    C --> D
    D --> E{Czy obraz OS istnieje lokalnie?}
    E -->|Nie| F[Pobierz obraz z URL]
    E -->|Tak| G[Użyj lokalnego obrazu]
    F --> G
    G --> H[Renderuj szablony cloud-init]
    H --> I[Utwórz ISO cloud-init]
    I --> J[Utwórz dysk VM z backing file]
    J --> K[Uruchom virt-install]
    K --> L[VM gotowa z Docker + Caddy]

Architektura systemu

┌─────────────────────────────────────────────────────────────────┐
│                          HOST SYSTEM                           │
├─────────────────────────────────────────────────────────────────┤
│  dockvirt CLI                                                   │
│  ├── config.py         (zarządzanie konfiguracją)              │
│  ├── image_manager.py  (pobieranie obrazów OS)                 │
│  ├── vm_manager.py     (tworzenie/usuwanie VM)                 │
│  └── cli.py           (interfejs użytkownika)                  │
├─────────────────────────────────────────────────────────────────┤
│  ~/.dockvirt/                                                   │
│  ├── config.yaml      (konfiguracja domyślna)                  │
│  ├── images/          (cache obrazów OS)                       │
│  └── vm_name/         (pliki cloud-init dla każdej VM)         │
├─────────────────────────────────────────────────────────────────┤
│  libvirt/KVM                                                    │
│  ├── virt-install     (tworzenie VM)                           │
│  ├── virsh            (zarządzanie VM)                         │
│  └── qemu-kvm         (wirtualizacja)                          │
└─────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│                        VIRTUAL MACHINE                         │
├─────────────────────────────────────────────────────────────────┤
│  Ubuntu/Fedora OS + cloud-init                                 │
│  ├── Docker Engine    (automatycznie zainstalowany)           │
│  └── docker-compose   (uruchamia kontenery)                   │
│      ├── Caddy        (reverse proxy na porcie 80/443)        │
│      └── App Container (Twoja aplikacja)                      │
└─────────────────────────────────────────────────────────────────┘

⚙️ Konfiguracja

dockvirt automatycznie tworzy plik konfiguracyjny ~/.dockvirt/config.yaml przy pierwszym uruchomieniu:

default_os: ubuntu22.04
images:
  ubuntu22.04:
    url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
    variant: ubuntu22.04
  fedora36:
    url: https://download.fedoraproject.org/pub/fedora/linux/releases/36/Cloud/x86_64/images/Fedora-Cloud-Base-36-1.5.x86_64.qcow2
    variant: fedora-cloud-base-36

🖥️ Użycie

Teraz używanie dockvirt jest znacznie prostsze - nie musisz już podawać ścieżek do obrazów:

# Użyj domyślnego OS (ubuntu22.04)
dockvirt up \
  --name my-app \
  --domain my-app.local \
  --image nginx:latest \
  --port 80

# Lub wybierz konkretny OS
dockvirt up \
  --name fedora-app \
  --domain fedora-app.local \
  --image httpd:latest \
  --port 80 \
  --os fedora36

Po utworzeniu VM, dockvirt wyświetli jej adres IP. Dodaj go do pliku /etc/hosts:

<adres_ip> my-app.local

📚 Przykłady użycia

Przygotowaliśmy kilka praktycznych przykładów, które pomogą Ci zacząć:

🛠️ Development

Repozytorium zawiera Makefile, który ułatwia proces deweloperski. Zobacz plik CONTRIBUTING.md, aby dowiedzieć się, jak wnieść wkład w rozwój projektu.

✍️ Autor

Tom Sapletta - Doświadczony programista i entuzjasta otwartego oprogramowania. Pasjonat automatyzacji i tworzenia narzędzi ułatwiających pracę deweloperom.

📜 Licencja

Projekt jest udostępniany na licencji Apache 2.0. Szczegóły znajdują się w pliku LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dockvirt-0.1.0.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dockvirt-0.1.0-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file dockvirt-0.1.0.tar.gz.

File metadata

  • Download URL: dockvirt-0.1.0.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for dockvirt-0.1.0.tar.gz
Algorithm Hash digest
SHA256 47ddcc18e6c6ce4fefab9019e367c47ab5f33e2d665054285007e65389f77d92
MD5 5d17df3d5801f682c2de146002872afd
BLAKE2b-256 63e378fbe0be5a3eaa80352e24169893fdfddb342f814907a017a1c61840c04c

See more details on using hashes here.

File details

Details for the file dockvirt-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dockvirt-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.12

File hashes

Hashes for dockvirt-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c097cdcd71c850ed5e11d8e437ad2b941ca2d100540b119b7d348b36baacd3c4
MD5 6b290b91c86539150571077681747e4c
BLAKE2b-256 47b2beca213c1a91fefa2eddbc42dda1093136c5f37fc53680caf3a330d63174

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page