Files
2026-04-25 00:31:19 -03:00

132 lines
4.5 KiB
Markdown

# 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.