first commit
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user