# 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 ```bash cd docker-manager go run . ``` A aplicação será iniciada em `http://localhost:3000` ### Compilar ```bash go build -o docker-manager . ./docker-manager ``` ### Configurar porta ```bash 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