132 lines
4.5 KiB
Markdown
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.
|