作为一名长期在容器化领域摸爬滚打的工程师,我一直在寻找能够简化Docker Compose管理的工具。最近发现了一个名为Dockman的开源项目,它完美解决了我在管理多个compose项目时的痛点。这个用Go编写的轻量级工具,通过Web界面提供了对docker-compose.yml文件的直接编辑能力,同时保留了Docker CLI的所有灵活性。
Dockman特别适合像我这样经常需要同时维护多个微服务项目的开发者。想象一下,你手头有三个正在开发的项目,每个项目都有独立的compose文件,传统方式需要在终端不断切换目录执行命令。而Dockman将这些操作集中到了一个清爽的Web界面中,还能实时查看容器状态和日志,大大提升了工作效率。
Dockman最吸引我的功能是内置的代码编辑器。不同于其他管理工具将配置抽象化,它允许你直接编辑原始的docker-compose.yml文件。这意味着:
实际使用中发现,编辑器还支持语法高亮和基础校验,这对避免YAML格式错误特别有帮助。
Dockman采用了一个很聪明的设计:它将所有compose项目统一存放在指定目录(默认为/stacks)下。这种结构带来几个优势:
在开发过程中,我经常需要同时查看多个容器的日志输出。Dockman的实时监控面板完美解决了这个问题:
在Ubuntu 24.04上部署前,需要确认以下组件:
bash复制# 检查Docker服务状态
sudo systemctl status docker
# 验证Docker版本(需要20.10.0+)
docker --version
# 确认Docker Compose V2可用
docker compose version
特别注意:Dockman要求Docker API版本至少为1.41,对应Docker 20.10.0+。如果使用较旧版本,可能会遇到兼容性问题。
我推荐采用以下目录结构,便于后期维护:
code复制/data/
└── dockman/
├── stacks/ # 存放所有compose项目
└── docker-compose.yml # Dockman自身配置
创建目录的命令:
bash复制sudo mkdir -p /data/dockman/stacks
sudo chmod -R 775 /data/dockman
bash复制docker run -d \
--restart always \
--name dockman \
-p 8866:8866 \
-v /data/dockman/stacks:/home/zaphodb/stacks \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKMAN_COMPOSE_ROOT=/home/zaphodb/stacks \
ghcr.io/ra341/dockman:latest
yaml复制version: '3.8'
services:
dockman:
image: ghcr.io/ra341/dockman:latest
environment:
- DOCKMAN_COMPOSE_ROOT=/home/zaphodb/stacks
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/dockman/stacks:/home/zaphodb/stacks
ports:
- "8866:8866"
container_name: dockman
restart: unless-stopped
启动命令:
bash复制cd /data/dockman
docker compose up -d
将现有compose项目迁移到Dockman非常简单:
bash复制docker compose -f /data/dockman/stacks/项目名/docker-compose.yml up -d
为了安全考虑,建议:
为Dockman创建专用用户:
bash复制sudo useradd -r -s /bin/false dockman
sudo chown -R dockman:dockman /data/dockman
在compose文件中指定用户:
yaml复制services:
dockman:
user: "1000:1000" # 替换为实际UID:GID
定期备份stacks目录至关重要:
bash复制# 创建压缩备份
tar -czvf dockman_backup_$(date +%Y%m%d).tar.gz /data/dockman/stacks
# 恢复备份
tar -xzvf dockman_backup_20230501.tar.gz -C /
症状:UI显示"Docker连接错误"
解决方法:
bash复制sudo chmod 666 /var/run/docker.sock
bash复制docker logs dockman
症状:文件已放入stacks目录但UI不显示
可能原因:
排查步骤:
bash复制# 进入容器检查文件是否存在
docker exec -it dockman ls /home/zaphodb/stacks
# 检查宿主机文件权限
ls -l /data/dockman/stacks
如果8866端口被占用,可以修改为其他端口:
yaml复制ports:
- "8888:8866" # 主机端口:容器端口
Dockman支持通过环境变量修改UI主题:
yaml复制environment:
- DOCKMAN_THEME=dark
可选值:light(默认)、dark、blue
为防止日志文件过大,可以配置logrotate:
bash复制sudo vim /etc/logrotate.d/dockman
# 内容如下:
/data/dockman/stacks/*/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 dockman dockman
}
通过暴露metrics端口实现监控集成:
yaml复制ports:
- "8866:8866"
- "9100:9100" # metrics端口
然后在Prometheus配置中添加:
yaml复制scrape_configs:
- job_name: 'dockman'
static_configs:
- targets: ['dockman-host:9100']
为防止Dockman占用过多资源:
yaml复制deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
对于包含大量服务的环境,可以启用SQLite缓存:
yaml复制environment:
- DOCKMAN_USE_CACHE=true
使用host网络模式提升性能:
yaml复制network_mode: host
注意:此模式下无需映射端口,直接使用主机网络
使用Nginx反向代理添加HTTPS:
nginx复制server {
listen 443 ssl;
server_name dockman.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:8866;
proxy_set_header Host $host;
}
}
通过基础认证增加安全层:
yaml复制environment:
- DOCKMAN_AUTH_USER=admin
- DOCKMAN_AUTH_PASSWORD=securepassword
仅允许特定IP访问:
bash复制sudo ufw allow from 192.168.1.0/24 to any port 8866
sudo ufw enable
Dockman支持通过插件扩展功能。以下是开发简单插件的步骤:
创建插件目录结构:
code复制my-plugin/
├── main.go
├── go.mod
└── plugin.json
示例plugin.json:
json复制{
"name": "My Plugin",
"version": "1.0.0",
"author": "Your Name",
"description": "A custom plugin for Dockman"
}
实现插件接口:
go复制package main
import (
"github.com/ra341/dockman/plugin"
)
func init() {
plugin.Register(&MyPlugin{})
}
type MyPlugin struct{}
func (p *MyPlugin) Initialize() error {
// 初始化逻辑
return nil
}
与其他类似工具对比:
| 工具名称 | 语言 | 主要特点 | 适合场景 |
|---|---|---|---|
| Dockman | Go | 轻量级,直接编辑compose文件 | 开发测试环境 |
| Portainer | JS | 功能全面,企业级功能 | 生产环境 |
| Shipyard | Go | 集群管理能力强 | Kubernetes集成 |
| Rancher | Go | 完整的容器管理平台 | 企业级部署 |
选择建议:
我在一个电商项目中这样使用Dockman:
为每个微服务创建独立目录:
code复制stacks/
├── user-service/
│ └── docker-compose.yml
├── product-service/
│ └── docker-compose.yml
└── order-service/
└── docker-compose.yml
通过Dockman统一管理所有服务
利用内置编辑器快速修改环境变量
实时查看所有服务的日志输出
将Dockman与GitLab CI集成:
yaml复制deploy:
stage: deploy
script:
- scp docker-compose.yml user@server:/data/dockman/stacks/project/
- ssh user@server "docker compose -f /data/dockman/stacks/project/docker-compose.yml up -d"
根据社区反馈,Dockman可能会加入:
我个人最期待的是团队协作功能,这将使Dockman更适合中小型开发团队使用。