Files
docker-manager/README.md
T
2026-04-25 00:23:30 -03:00

4.5 KiB

Docker Manager

Aplicação web para gerenciar Docker localmente com backend em Go + net/http e frontend vanilla (HTML/CSS/JS).

Features

  • Dashboard: 4 blocos com status (Total Containers, Running, Stopped, Total Images) + card System Info com Docker Version, OS, Architecture, CPUs, Memory, Kernel, Server Version
  • Containers: Tabela com columns (Name, Image, Status, Ports, Created) + ações (Start/Stop/Restart/Logs/Remove)
  • Images: Tabela com columns (Repository, Tag, ID, Size, Created) + Pull com progresso por layer + Remove
  • Interface Dark Theme: Tema dark moderno inspirado no GitHub Dark
  • Real-time Updates: Polling a cada 30 segundos

Stack

  • Backend: Go 1.22 + net/http (sem dependências externas)
  • Frontend: HTML5 + CSS3 + Vanilla JavaScript (sem frameworks)
  • API: REST com JSON

Estrutura

docker-manager/
├── main.go                    # Servidor principal
├── go.mod                     # Módulo Go
├── docker/
│   └── client.go             # Cliente Docker + detecção de socket
├── handlers/
│   ├── info.go               # Handler GET /api/info
│   ├── containers.go         # Handlers de containers
│   └── images.go             # Handlers de images
└── static/
    ├── index.html            # HTML da aplicação
    ├── style.css             # Estilos (tema dark)
    └── app.js                # Lógica frontend (vanilla JS)

Instalação e Execução

Pré-requisitos

  • Go 1.22+
  • Docker Engine instalado e acessível

Rodar a aplicação

cd docker-manager
go run .

A aplicação será iniciada em http://localhost:3000

Compilar

go build -o docker-manager .
./docker-manager

Configurar porta

PORT=8080 go run .

Detecção do Docker Socket

O backend detecta automaticamente o socket Docker nesta ordem:

  1. Variável de ambiente DOCKER_HOST (formato unix:///path/to/socket)
  2. Docker context ativo via docker context inspect
  3. Caminhos conhecidos:
    • /var/run/docker.sock
    • ~/.docker/run/docker.sock
    • ~/Library/containers/com.docker.docker/Data/docker.raw.sock
    • /run/docker.sock
  4. Fallback: /var/run/docker.sock

API Endpoints

Info

  • GET /api/info - Informações do Docker Engine

Containers

  • GET /api/containers - Listar todos os containers
  • POST /api/containers/{id}/start - Iniciar container
  • POST /api/containers/{id}/stop - Parar container
  • POST /api/containers/{id}/restart - Reiniciar container
  • DELETE /api/containers/{id} - Remover container
  • GET /api/containers/{id}/logs?tail={n} - Obter logs do container (tail: 50/100/200/500)

Images

  • GET /api/images - Listar todas as imagens
  • DELETE /api/images/{id} - Remover imagem
  • GET /api/images/pull?name={name} - Fazer pull de imagem

Como Usar

  1. Dashboard:
    • Visualize 4 blocos de status: Total Containers, Running, Stopped, Total Images
    • Veja informações do sistema: Docker Version, OS, CPUs, Memory, Kernel, Server Version
  2. Containers:
    • Tabela com todos os containers: Name, Image, Status (badge colorido), Ports (chips), Created (tempo relativo)
    • Ações: Start/Stop/Restart (para em execução), Logs com seletor de tail (50/100/200/500 linhas), Remove (com confirmação)
  3. Images:
    • Tabela com todas as imagens: Repository, Tag, ID, Size, Created
    • Imagens com múltiplas tags geram múltiplas linhas
    • Pull de novas imagens com progresso por layer ID (reescreve linhas existentes)
    • Remove com confirmação
  4. Status: O indicador colorido no topo direito mostra se está conectado ao Docker

Limitações e Notas

  • Sem autenticação (apenas para uso local)
  • CORS habilitado para * (apenas para desenvolvimento)
  • Logs com seletor de tail (50/100/200/500 linhas)
  • Modal de confirmação genérico para operações destrutivas (Remove)
  • Pull com progresso em tempo real via streaming
  • Códigos ANSI nos logs são removidos antes da exibição
  • Sem suporte a containers com privilegios elevados

Desenvolvimento

Para modificar o frontend, edite:

  • static/index.html - Estrutura HTML (navbar com logo Docker + tabs + modal)
  • static/style.css - Estilos (tema dark, tabelas, modal, toasts, animações)
  • static/app.js - Lógica JavaScript (fetch, render, handlers, confirmação)

Para modificar o backend, edite:

  • main.go - Rotas e configuração
  • docker/client.go - Cliente Docker
  • handlers/*.go - Lógica dos endpoints