Czym jest Dockhand
Dockhand jest narzędziem open source z interfejsem graficznym (Web GUI), służącym do wizualnego zarządzania i orkiestracji środowiskami kontenerowymi opartymi na silniku Docker oraz Docker Compose. Został zaprojektowany jako lekka, nowoczesna i kładąca nacisk na bezpieczeństwo alternatywa dla złożonych systemów zarządzania, takich jak Portainer czy Yacht. Dockhand posiada dwa rodzaje licencji: darmowy i enterprise. Link do dokumentacji

Głównym przeznaczeniem Dockhand jest maksymalne uproszczenie administracji kontenerami przy zachowaniu pełnej kontroli nad infrastrukturą. Jest to rozwiązanie typu self-hosted, które idealnie sprawdza się w środowiskach deweloperskich, domowych laboratoriach (homelab) oraz w małych i średnich infrastrukturach, gdzie priorytetem jest szybkość działania, czytelny interfejs oraz brak zbędnego narzutu zasobów (overhead).
Opis funkcjonalności
Jedną z Funkcjonalności jest Zarządzanie Stosami (Compose-first) redefiniuje pracę z kontenerami, stawiając standard Docker Compose w samym centrum operacji. System nie tylko pozwala na wklejenie przygotowanego pliku YAML, ale oferuje inteligentny edytor z wbudowaną walidacją składni, który w czasie rzeczywistym wychwytuje błędy w formatowaniu lub nieobsługiwane parametry. Dzięki temu wdrażanie wielokontenerowych aplikacji, obejmujących bazy danych, serwery aplikacyjne i proxy, staje się procesem wolnym od błędów konfiguracyjnych, a przejrzysty interfejs pozwala na zarządzanie zmiennymi środowiskowymi i modyfikowanie limitów zasobów bez konieczności ręcznego edytowania plików na serwerze.

W obszarze Bezpieczeństwa i Skanowania (CVE), Dockhand pełni rolę skanera podatności pobieranych i uruchamianych obrazów. Zintegrowane moduły skanujące analizują każdą warstwę obrazu kontenera, porównując ją z globalnymi bazami danych o podatnościach, takimi jak NIST NVD. System identyfikuje luki w bibliotekach systemowych i aplikacyjnych, przypisując im odpowiednie priorytety (od niskich po krytyczne). Pozwala to na proaktywne zarządzanie ryzykiem i podejmowanie decyzji o aktualizacji obrazów bazowych jeszcze zanim potencjalna podatność zostanie wykorzystana.

Wsparcie dla GitOps to kluczowa funkcja dla nowoczesnych procesów CI/CD, która czyni repozytorium Git “jedynym źródłem prawdy”. Dockhand umożliwia ustanowienie stałego połączenia z serwisami takimi jak GitHub lub GitLab, automatycznie synchronizując stan kontenerów z plikami konfiguracyjnymi utrzymywanymi w repozytorium. Każdy commit i push do gałęzi produkcyjnej może wyzwolić natychmiastową aktualizację stosu na serwerze, eliminując potrzebę ręcznego logowania się przez SSH i ręcznego wywoływania komend docker-compose up
Dockhand umożliwia precyzyjne definiowanie okien serwisowych dla procesów synchronizacji:
- Daily (Codziennie): Aktualizacja wykonywana raz na dobę o określonej godzinie.
- Weekly (Tygodniowo): Aktualizacja w konkretny dzień tygodnia o zdefiniowanej porze.
- Custom (Własne): Pełna kontrola nad harmonogramem przy użyciu wyrażeń cron (np. dla specyficznych interwałów lub wykluczeń).
Dockhand umożliwia automatyczne wyzwalanie procesów Stack Deployment poprzez zewnętrzne usługi, takie jak GitHub, GitLab czy dowolne potoki CI/CD. Pozwala to na synchronizację stanu infrastruktury z kodem źródłowym (GitOps) z wykorzystaniem webhooków.
Każdy stos (Git stack) posiada unikalny punkt dostępowy URL, który służy do inicjacji procesu:
https://twoj-dockhand.com/api/git/stacks/{id}/webhook. Dostępne są metody:
- POST (Zalecane): Standardowa metoda używana przez serwisy Git. Obsługuje opcjonalną weryfikację podpisu (signature verification), co zapewnia integralność i bezpieczeństwo żądania.
- GET: Uproszczona metoda wyzwalania, idealna do manualnych testów z poziomu przeglądarki lub prostych skryptów monitorujących.

Funkcja Automatyzacji Aktualizacji (Auto-updates) rozwiązuje problem przestarzałego oprogramowania poprzez inteligentne monitorowanie rejestrów obrazów. Dockhand potrafi śledzić nowe tagi w Docker Hub czy GHCR i stosować strategię “Safe-Pull”, która pobiera nową wersję obrazu w tle i weryfikuje jego integralność przed wykonaniem restartu usług. Możliwość definiowania harmonogramów aktualizacji pozwala na planowanie zmian w godzinach najmniejszego ruchu, co gwarantuje wysoką dostępność usług przy minimalnym zaangażowaniu administratora.

Zarządzanie wieloma hostami (Agentless/Agent) pozwala na skalowanie zarządzania bez wprowadzania niepotrzebnej złożoności. Dzięki lekkiemu agentowi o nazwie Hawser, Dockhand może kontrolować wiele rozproszonych maszyn z poziomu jednego centralnego panelu. Komunikacja może odbywać się porzez szyfrowane połączenie TLS, co umożliwia zarządzanie serwerami brzegowymi, instancjami w różnych chmurach publicznych oraz lokalnymi serwerami deweloperskimi w ramach jednego, spójnego widoku floty.

Wykorzystany w projekcie Nowoczesny Stos Technologiczny oparty na runtime Bun oraz obrazach Wolfi OS sprawia, że Dockhand jest bardzo wydajne. Wybór Bun zamiast tradycyjnego Node.js przekłada się na szybkie renderowanie interfejsu i minimalny narzut na pamięć RAM hosta. Zastosowanie Wolfi OS – systemu typu distroless zorientowanego na bezpieczeństwo – ogranicza liczbę zbędnych pakietów w obrazie, co nie tylko przyspiesza działanie, ale też minimalizuje płaszczyznę ataku, realizując politykę “Zero-CVE”.
Pełna diagnostyka systemu zamyka cykl zarządzania, dostarczając wiele narzędzi do debugowania w jednym miejscu. Interfejs udostępnia logi w czasie rzeczywistym z obsługą kolorowania składni, interaktywny terminal webowy do bezpośredniej interakcji z powłoką kontenera oraz menedżer plików umożliwiający interakcję z wolumenami. Dzięki temu diagnozowanie i rozwiązywanie problemów z aplikacją odbywa się bez opuszczania przeglądarki, co jest bardzo wygodne.
Wymagania
| Component | Requirement |
|---|---|
| Docker Engine | 20.10 or later |
| Docker API | 1.41 or later |
| Memory | 512 MB minimum, 1 GB recommended |
| Browser | Chrome, Firefox, Safari, Edge (latest versions) |
| Database | SQLite (default) or PostgreSQL 14+ |
Skanowanie podatności
Dockhand integruje się z silnikami Grype oraz Trivy, zapewniając wielowarstwową analizę bezpieczeństwa obrazów kontenerowych. Wykorzystanie dwóch niezależnych skanerów pozwala na szerszą detekcję luk typu CVE (Common Vulnerabilities and Exposures) oraz minimalizację ryzyka wystąpienia wyników False Negative.
Klasyfikacja poziomów krytyczności
Zidentyfikowane podatności są mapowane na standardowe poziomy dotkliwości:
| Severity | Kolor | Charakterystyka |
|---|---|---|
| Critical | Czerwony | Krytyczne podatności wymagające natychmiastowej mitygacji. |
| High | Pomarańczowy | Poważne podatnościo wysokim priorytecie naprawczym. |
| Medium | Żółty | Umiarkowane ryzyko; zalecana poprawka w standardowym cyklu wydawniczym. |
| Low | Niebieski | Niskie ryzyko; podatności o ograniczonej wektorze ataku. |
| Brakuje jednak informacji i CVSS - Common Vulnerability Scoring System. |
Dockhand umożliwia precyzyjne definiowanie okien serwisowych dla procesów aktualizacji:
- Daily (Codziennie): Aktualizacja wykonywana raz na dobę o określonej godzinie.
- Weekly (Tygodniowo): Aktualizacja w konkretny dzień tygodnia o zdefiniowanej porze.
- Custom (Własne): Pełna kontrola nad harmonogramem przy użyciu wyrażeń cron (np. dla specyficznych interwałów lub wykluczeń).
Włączenie skanowania podatności pozwala na skonfigurowanie reguł blokujących automatyczne aktualizacje. Mechanizm ten zapewnia granularną kontrolę pomiędzy posiadaniem najnowszego oprogramowania (freshness), a utrzymaniem bezpiecznego środowiska.
| Kryterium | Warunek blokady aktualizacji | Zastosowanie (Best Practice) |
|---|---|---|
| Never block | Brak blokady (aktualizacja zawsze postępuje) | Środowiska deweloperskie, kontenery niekrytyczne |
| Any vulnerability | Wykrycie dowolnej podatności (Critical–Low) | Środowiska o rygorystycznych wymogach bezpieczeństwa |
| Critical or High | Wykrycie podatności o stopniu Critical lub High | Zalecane dla środowisk produkcyjnych |
| Critical only | Wykrycie wyłącznie podatności o stopniu Critical | Podejście zbalansowane (tolerancja High/Medium) |
| More than current | Liczba podatności w nowym obrazie > w obecnym | Strategia progresywnej poprawy bezpieczeństwa |
Konfiguracja podstawowa
Uruchomienie jako w środowisku docker:
# Create the directory on the host
mkdir -p /opt/dockhand
# Use matching paths with DATA_DIR
docker run -d \
--name dockhand \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/dockhand:/opt/dockhand \
-e DATA_DIR=/opt/dockhand \
fnsys/dockhand:latestUruchomienie z wykorzystaniem docker-compose:
services:
dockhand:
image: fnsys/dockhand:latest
container_name: dockhand
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- dockhand_data:/app/data
volumes:
dockhand_data:Podłączanie zewnętrznych środowisk
Hawser to lekki agent napisany w języku Go, który rozszerza możliwości Dockhand o zarządzanie hostami Docker w złożonych topologiach sieciowych. Pozwala na bezpieczną komunikację z maszynami znajdującymi się za NAT-em, firewallami lub dysponującymi dynamicznymi adresami IP. Hawser oferuje dwa tryby operacyjne, pozwalające na dostosowanie do specyfiki infrastruktury:
| Tryb | Zastosowanie | Mechanizm działania |
|---|---|---|
| Standard | Sieci LAN, homelaby, statyczne IP | Agent nasłuchuje; Dockhand inicjuje połączenie. |
| Edge | VPS, NAT, dynamiczne IP, firewalls | Agent inicjuje połączenie wychodzące do Dockhand przez WebSocket. |
Tryb Standard (Direct Connection) W tym trybie Dockhand łączy się bezpośrednio z agentem Hawser działającym na serwerach z Docker. Agent udostępnia API HTTP, które pełni rolę proxy dla lokalnego gniazda (socket) Dockera.
- Zalety:
- Prostota: Szybka konfiguracja – wystarczy uruchomienie binarnego agenta.
- Niskie opóźnienia: Bezpośrednia komunikacja bez pośredników.
- Wsparcie sieci: Działa w dowolnej sieci z pełną łącznością IP.
- Bezpieczeństwo: Opcjonalne szyfrowanie TLS.
- Ograniczenia:
- Wymaga otwarcia portu wejściowego (Inbound) na hoście z Dockerem.
- Konieczność posiadania statycznego adresu IP lub skonfigurowanego DNS dla agenta.
- Często wymaga modyfikacji reguł firewalla.
Tryb Edge (Inboundless Management - Zarządzanie bez portów wejściowych) Ten tryb został zaprojektowany z myślą o maksymalnej izolacji sieciowej. Zamiast otwierać porty na zewnątrz na serwerach z dockerem, agent inicjuje połączenie wychodzące do instancji Dockhand.
- WebSocket Tunneling: Stabilne, dwukierunkowe połączenie utrzymywane przez agenta.
- NAT Bypass: Idealne rozwiązanie dla hostów za podwójnym NAT-em lub restrykcyjnymi firewallami, które blokują ruch przychodzący.
Konfiguracja sso z Authentik
Ograniczeniem darmowej wersji jest niedostępność RBAC oraz mapowania roli w aplikacji. Każdy utworzony użytkownik ma prawa administratora, co uniemożliwia separację obowiązków. Dodatkową funkcjonalnością wersji płatnej jest możliwość integracji z LDAP/AD. Bardzo wielki ukłon w stronę autorów, za udostępnienie w wersji darmowej możliwości skonfigurowania OIDC/SSO. W moim przypadku skonfigurowałem połączenie ze źródłem tożsamości - authentik.

Podsumowanie
Dockhand to nowoczesna i lekka alternatywa dla rozbudowanych narzędzi typu Portainer, która wyróżnia się wyjątkową wydajnością dzięki wykorzystaniu środowiska Bun oraz bezpiecznego systemu Wolfi OS. Narzędzie stawia na podejście GitOps i standard Docker Compose, oferując inteligentną walidację plików YAML, automatyzację aktualizacji poprzez harmonogramy oraz skanowanie podatności obrazów (CVE) przy użyciu silników Grype i Trivy. Jego kluczowym atutem jest elastyczność w zarządzaniu rozproszoną infrastrukturą dzięki agentowi Hawser (tryby Standard i Edge) oraz wsparcie dla standardów SSO nawet w wersji darmowej, co czyni go idealnym wyborem dla deweloperów i administratorów szukających balansu między prostotą a zaawansowaną kontrolą bezpieczeństwa. Narzędzie już zostanie ze mną na produkcji mojego homelabu jako zastępując kontenery pulse, prunemate oraz tugtainer. Integracja z gittea, popchnęła mnie w kierunku dawno planowanego IaC - Infrastructure as a Code.
Chciałbyś poczytać o innych rozwiązaniach? Daj znać w komentarzu.
https://www.linkedin.com/pulse/dockhand-piotr-socik-gsyef
Docker Containerization DevOps SelfHosted OpenSource Homelab Dockhand GitOps CyberSecurity CVE CloudNative Infrastructure SysAdmin Bun WolfiOS Konteneryzacja Automatyzacja