Dockhand: Interfaz moderna para gestión de Docker

Publicado por


Gestión de Docker

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.

Combina una interfaz visual completa con capacidades avanzadas como despliegue desde Git con webhooks, backups programados con Restic, escaneo de vulnerabilidades con Grype y Trivy, y terminal interactivo integrado, todo sobre una base de sistema operativo Wolfi endurecida.

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:

version: '3.8'

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:

version: '3.8'

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:

docker compose up -d

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:

PORT=3000 # Puerto de la aplicación (defecto 3000)
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.

volumes:
– /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.

volumes:
– ./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.

environment:
– PUID=1001
– PGID=1001

Gestión y mantenimiento

Actualización de imagen

Descarga la última imagen y reinicia el contenedor:

docker compose pull
docker compose up -d

Backup de la base de datos SQLite

Copia el archivo de base de datos desde el volumen de datos:

docker compose exec dockhand cp /app/data/dockhand.db /app/data/dockhand.backup.$(date +%F).db
# 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:

tar -czf dockhand-stacks-backup-$(date +%F).tar.gz ./stacks

Restauración

Detén la aplicación, restaura los archivos y reinicia:

docker compose down
# 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:

docker compose logs -f dockhand

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

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *