前言
在网络环境越来越严苛的时代,把数据和服务掌握在自己手里成为了越来越多人选择。作为一个折腾党,从第一台树莓派开始,前前后后搭建了不少Home server和Vps的自托管服务。多年下来尝试的selfhosted服务不少(顺便附上著名的awesome-selfhosted),剩到最后的却没几个(当然折腾本身也是一种乐趣)。
比较尴尬的是有些服务可能用了一阵子放弃掉了,但时隔多年后又发现有类似需求,再折腾起来又要从头开始,因此本人决定将折腾selfhosted的一些经验和配置方法逐渐记录在少数派,一方面供自己日后查找,另一方面也跟同好者有个交流管道。
今天首先介绍一款14.1k star的开源Docker管理应用Dockge。
Dockge是什么
用原作者自己的话描述
Dockge是一款时髦、易用、及时响应的自托管compose管理服务。
使用Docker运行自托管服务的用户一般要么使用nas厂商的工具软件如群晖的Container manager、威联通Container Station等,要么使用大名鼎鼎的Portainer。这两类都以全图形化UI为主要特点,相对来讲更易于上手。但使用的容器多了之后就发现这种使用方式比较繁琐,也不利于版本管理和重新部署。这时,使用Compose管理容器就变得更加方便。
Docker Compose是官方提供的多容器管理方案,可以同时管理都多个容器的配置、网络和挂载等信息,由于采用yaml配置文件记录信息,就更易用做备份、版本管理和迁移。yaml文件可以直接保存在服务器上,直接通过命令行启动和管理,也可以通过上文提到的Portainer提供了Stacks功能完成。

但Portainer有个比较棘手的问题,通过Web UI编写的compose文件只能挂载到特定的路径下面,给备份、版本管理带来很大的麻烦。因此,Uptime kuma的作者编写了Dockge,其最主要的初衷就是在不“绑架”用户compose文件的基础上,通过Web ui管理所有compose。
Dockge怎么用
安装
管理compose的软件当然要使用compose安装:
services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
container_name: dockge
user: 1000:1003 # 当前用户的uid,gid
group_add:
- "999" # docker group的gid
ports:
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
# Stacks Directory
# ⚠️ READ IT CAREFULLY. If you did it wrong, your data could end up writing into a WRONG PATH.
# ⚠️ 1. FULL path only. No relative path (MUST)
# ⚠️ 2. Left Stacks Path === Right Stacks Path (MUST)
- /docker/stacks:/docker/stacks # stack的存放目录,跟宿主机的目录要相同
environment:
# Tell Dockge where to find the stacks
- DOCKGE_STACKS_DIR=/docker/stacks官方的安装说明比较简单,把Docker API的接口/var/run/docker.sock挂载到容器,再持久化存储目录。这里我对官方安装方式做了一些更改,主要原因是由于要读取Docker接口,官方的安装方法以root身份运行容器,导致后续通过网页端创建的所有stack都会以root权限存储,再通过终端访问时同样需要root身份修改和删除,带来很大不便。好在GitHub上有人提供了解决方案,设置user和group_add两个选项,这部分内容在终端输入id命令获得,分别把user: uid:gid和group_add: - "docker group id"填入对应位置即可。
user@host:/opt/stacks$ id
uid=1000(user) gid=1003(user) groups=1003(user),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),107(input),110(render),117(netdev),999(docker),1000(gpio),1001(spi),1002(i2c)这里需要注意的是,群晖的api接口权限不在docker用户组下,可以通过ls -l /var/run/docker.sock查看对应的用户组,再通过id命令把对应用户组内容填进group_add项中。
user@Synology:~$ ls -l /var/run/docker.sock
srw-rw---- 1 root administrators 0 Dec 28 17:45 /var/run/docker.sock配置好compose.yaml文件后,在同路径下输入docker compose up -d(群晖用docker-compose up -d)启动容器,访问5001端口即可看到网页端。这里还有个小问题就是dockge自身的compose文件也可以放到stacks文件夹下管理,后续通过网页端可以看到自身的运行情况,但无法通过网页端重启。
使用

使用方面其实没有太多可说的,功能都比较直观,网页端提供了以下功能:
- 新建compose功能:会在stacks路径下生成对应名称的文件夹和compose.yaml文件,可直接在网页端更改;
- compose的启停管理,日志显示;
- 将docker run自动转换为compose格式并生成相应文件;
- 可以直接访问容器暴露端口和进入容器bash;
- 多个Dockge代理同时管理,将对应服务地址和认证信息填入即可。

如果是将已有的compose文件导入到Dockge,先将对应compose拷贝到stacks文件夹,然后点击右上角头像->扫描堆栈文件夹,即可看到导入的compose。

存在的问题
使用一段时间之后,个人认为Dockge对于习惯compose管理容器的用户还是比较友好的,但相比Portainer也存在一些不太方便的地方:
- 网页内终端无法复制粘贴;
- yaml编辑器没有comment/uncomment快捷键;
- 缺少network,image管理等功能。
总体而言,日常使用对于容器做一些微调、查看容器运行状态等情况下Dockge会更加方便,对于一些更全面的功能则可以跟Portainer同时使用,各有所长。
