前言

在网络环境越来越严苛的时代,把数据和服务掌握在自己手里成为了越来越多人选择。作为一个折腾党,从第一台树莓派开始,前前后后搭建了不少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提供的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文件夹下管理,后续通过网页端可以看到自身的运行情况,但无法通过网页端重启。

使用

screenshot
Dockge图形界面

使用方面其实没有太多可说的,功能都比较直观,网页端提供了以下功能:

  • 新建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同时使用,各有所长。

1
1