Dockhand: Interfaz moderna para gestión de Docker
Gestión de contenedores, stacks Compose y entornos múltiples en una UI ligera y segura
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar Dockhand: Interfaz moderna para gestión de Docker en el canal GENBYTE:
¿Qué es Dockhand: Interfaz moderna para gestión de Docker?
Dockhand es una aplicación moderna y eficiente de gestión de Docker que proporciona administración de contenedores en tiempo real, orquestación de stacks Compose y soporte multi-entorno. Todo en un paquete ligero, seguro y centrado en la privacidad. El proyecto está desarrollado por Finsys y se distribuye bajo la licencia Business Source License 1.1 (BSL 1.1), que permite uso gratuito para laboratorios caseros, organizaciones sin ánimo de lucro, instituciones educativas, freelancers y entornos de desarrollo, pruebas, staging, CI/CD, evaluación, demos y formación sin límite de usuarios ni entornos. El uso en producción en organizaciones con empleados requiere una licencia comercial.
Características principales
Gestión de contenedores
Iniciar, detener, reiniciar y monitorizar contenedores en tiempo real con métricas de CPU, memoria y disco por host.
Stacks Compose
Editor visual para despliegues Docker Compose con edición YAML lado a lado con variables de entorno y gráfico de dependencias de servicios, redes y secretos.
Integración Git
Desplegar stacks desde repositorios Git con webhooks y sincronización automática.
Multi-entorno
Gestionar hosts Docker locales y remotos desde una única interfaz, conectando vía socket, agente o TCP directo.
Terminal y logs
Acceso a shell interactivo y streaming de logs en tiempo real con terminal junto a los logs.
Navegador de archivos
Explorar, subir, descargar y editar archivos dentro de contenedores y volúmenes.
Backups
Destinos Restic con backup programado, restauración, verificación y operaciones de poda.
Autenticación
SSO vía OIDC, usuarios locales y RBAC opcional en versión Enterprise.
Escaneo de vulnerabilidades
Resultados CVE por imagen usando Grype y Trivy.
Programación de tareas
Automatización estilo cron para poda, actualizaciones y limpieza.
Registro de actividad
Auditoría de cada acción en todos los entornos.
Gráfico de red
Visualizar cómo se conectan los servicios entre stacks.
Requisitos del sistema
- Docker Engine
- Docker Compose (v2 como plugin o v5.5.1 standalone)
- Acceso al socket de Docker (/var/run/docker.sock) o endpoint TCP remoto
- Arquitectura compatible: amd64 (x86_64) o arm64 (aarch64)
- Mínimo 512 MB RAM disponibles para la aplicación
- Puerto 3000 libre para la interfaz web (configurable via variable PORT)
Instalación con Docker Compose
Despliegue con Docker Compose (SQLite)
La forma más sencilla es usar la imagen oficial con base de datos SQLite integrada. Crea un archivo docker-compose.yaml con el siguiente contenido:
services:
dockhand:
image: ghcr.io/finsys/dockhand:latest
container_name: dockhand
restart: unless-stopped
ports:
– "3000:3000"
volumes:
– /var/run/docker.sock:/var/run/docker.sock:ro
– ./data:/app/data
– ./stacks:/home/dockhand/.dockhand/stacks
environment:
– PUID=1001
– PGID=1001
– TZ=Europe/Madrid
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:3000/"]
interval: 30s
timeout: 10s
start_period: 5s
retries: 3
volumes:
data:
stacks:
Despliegue con Docker Compose (PostgreSQL)
Para entornos que requieran PostgreSQL, el proyecto proporciona un archivo docker-compose-postgresql.yaml de referencia. El esquema requiere un servicio postgres y configurar las variables de conexión en Dockhand:
services:
dockhand:
image: ghcr.io/finsys/dockhand:latest
container_name: dockhand
restart: unless-stopped
ports:
– "3000:3000"
volumes:
– /var/run/docker.sock:/var/run/docker.sock:ro
– ./stacks:/home/dockhand/.dockhand/stacks
environment:
– PUID=1001
– PGID=1001
– TZ=Europe/Madrid
– DATABASE_URL=postgresql://dockhand:password@postgres:5432/dockhand
depends_on:
– postgres
healthcheck:
test: ["CMD", "curl", "-fs", "http://localhost:3000/"]
interval: 30s
timeout: 10s
start_period: 5s
retries: 3
postgres:
image: postgres:16-alpine
container_name: dockhand-postgres
restart: unless-stopped
volumes:
– postgres_data:/var/lib/postgresql/data
environment:
– POSTGRES_USER=dockhand
– POSTGRES_PASSWORD=password
– POSTGRES_DB=dockhand
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dockhand"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres_data:
stacks:
Iniciar la aplicación
Ejecuta Docker Compose en el directorio donde guardaste el archivo:
Acceder al proyecto
Interfaz web
Accede a la interfaz en http://<IP_DEL_HOST>:3000 tras iniciar los contenedores. La primera vez se mostrará un asistente de configuración inicial para crear el usuario administrador y configurar el primer entorno Docker.
HTTPS (opcional)
Para habilitar HTTPS, establece la variable de entorno HTTPS_MODE=on y proporciona certificados TLS mediante volúmenes o variables según la documentación oficial. El healthcheck interno adapta su comprobación a HTTP o HTTPS según este valor.
Casos de uso
- Administración centralizada de múltiples hosts Docker (locales y remotos) desde una sola UI
- Despliegue y orquestación de aplicaciones multi-contenedor mediante stacks Compose con editor visual
- Gestión de flujos de trabajo GitOps: despliegue automático de stacks desde repositorios Git con webhooks
- Acceso remoto seguro a terminal y logs de contenedores sin exponer puertos SSH adicionales
- Exploración y manipulación de archivos en contenedores y volúmenes sin necesidad de exec manual
- Políticas de backup automatizadas con Restic para volúmenes y bases de datos
- Escaneo continuo de vulnerabilidades en imágenes con Grype y Trivy
- Auditoría completa de acciones mediante registro de actividad
- Automatización de mantenimiento: poda de imágenes, actualizaciones y limpieza programada
Configuración avanzada
Variables de entorno principales
La imagen soporta las siguientes variables de entorno documentadas en el Dockerfile y entrypoint:
HOST=0.0.0.0 # Interfaz de escucha
DATA_DIR=/app/data # Directorio de datos persistentes
HOME=/home/dockhand # Home del usuario dockhand
PUID=1001 # User ID del usuario dockhand
PGID=1001 # Group ID del usuario dockhand
HTTPS_MODE=off # 'on' para habilitar HTTPS (requiere certs)
DATABASE_URL= # URL de conexión PostgreSQL (opcional, usa SQLite si no se define)
TZ=UTC # Zona horaria para logs y programaciones
Montaje del socket Docker
Para gestionar el host local, monta el socket de Docker en modo solo lectura. Para hosts remotos, configura la conexión TCP en la UI tras el primer acceso.
– /var/run/docker.sock:/var/run/docker.sock:ro
Persistencia de stacks y datos
Los stacks desplegados desde Git y la configuración de entornos se guardan en /home/dockhand/.dockhand/stacks. La base de datos SQLite (o PostgreSQL) reside en /app/data. Ambas rutas deben montarse en volúmenes persistentes.
– ./data:/app/data
– ./stacks:/home/dockhand/.dockhand/stacks
Usuario y permisos
La imagen crea el usuario dockhand (UID 1001, GID 1001). Las variables PUID y PGID permiten ajustar los IDs para coincidir con los del host y evitar problemas de permisos en volúmenes montados.
– PUID=1001
– PGID=1001
Gestión y mantenimiento
Actualización de imagen
Descarga la última imagen y reinicia el contenedor:
docker compose up -d
Backup de la base de datos SQLite
Copia el archivo de base de datos desde el volumen de datos:
# O desde el host si usas bind mount:
cp ./data/dockhand.db ./data/dockhand.backup.$(date +%F).db
Backup de configuración y stacks
Los stacks y configuración de entornos están en el volumen stacks:
Restauración
Detén la aplicación, restaura los archivos y reinicia:
# Restaurar data/dockhand.db y stacks/
docker compose up -d
Limpieza de imágenes no usadas
Dockhand incluye programador de tareas (cron) para poda automática. También puede ejecutarse manualmente desde la UI en la sección Schedules o vía API.
Logs de la aplicación
Consulta los logs del contenedor para diagnóstico:
Stack técnico
- Wolfi OS (base endurecida vía apko)
- Node.js 24.18.1 (runtime de producción, sustituye a Bun por estabilidad mTLS)
- SvelteKit 2 / Svelte 5 (frontend)
- shadcn-svelte + TailwindCSS (UI)
- Bun (runtime de desarrollo y testing)
- Drizzle ORM (SQLite y PostgreSQL)
- better-sqlite3 (driver SQLite nativo)
- postgres.js (driver PostgreSQL)
- Docker CLI, docker-compose, buildx (incluidos en la imagen)
- Restic (backups)
- Grype y Trivy (escaneo de vulnerabilidades)
- Go 1.26 (collector worker)
- OpenSSH client + git (despliegue desde Git)
- Tini (init system)
Referencias oficiales
- Repositorio oficial GitHub: https://github.com/Finsys/dockhand
- Sitio web oficial: https://dockhand.pro
- Documentación oficial: https://dockhand.pro/manual
- Licencia BSL 1.1: https://github.com/Finsys/dockhand/blob/main/LICENSE.txt
- Imagen Docker (GHCR): https://github.com/Finsys/dockhand/pkgs/container/dockhand
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
