家庭云不一样的玩法:集中管理群晖与威联通NAS上的docker服务


HK君不喜欢重复造轮子,docker各种软件的安装部署随便一搜就能找到很多教程,就懒得写了。这次写一下群晖和威联通NAS上的docker的独家玩法吧(之前在国内网站上似乎没有见过相关内容)。

现在NAS玩家、虚拟化玩家和垃圾佬们家里通常会有多个设备上跑着docker,比如我在软路由上用docker跑着一些服务,在威联通NAS上又用docker跑着一些下载软件。有些人可能还在N1之类设备上跑着docker服务。设备多了,管理也是一个问题。这时我们可以用一个Portainer来集中管理这些设备上的docker服务。

为什么要用portainer来集中管理?

1、Portainer简单说就是一个能够管理docker的docker容器。Portainer的功能比NAS系统上自带的docker管理界面要强大很多。NAS上的docker管理界面通常只能满足最基本的管理需求。

例如在NAS上的docker管理界面创建一个docker之后,很多配置就无法再次修改,又或者想要对已经部署好的docker的镜像进行升级,这些操作就需要重新创建一个docker,或者需要使用命令行。而使用Portainer,可以非常方便的对已经部署好的docker进行修改、复制,甚至只点几下鼠标,就可以对docker使用的镜像进行升级。

2、Portainer可以在一个后台集中管理多个设备上的docker服务,就不需要到各个设备的后台或者命令行去操作了。

此文主要就是讲解让Portainer通过docker API连接到群晖和威联通NAS上的docker服务来进行管理的方法。

Portainer的部署

首先当然我们需要用docker部署一个Portainer,这个Portainer可以部署在内网中的任意一个docker服务上,例如我是部署在软路由上的OMV虚拟机上的,当然你也可以部署在群晖或者威联通NAS上。

通常Portainer在命令行下的部署命令是:

docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /portainer_data:/data portainer/portainer

-p 9000:9000是指把容器的9000端口映射到主机的9000端口(或者其他端口也可以)。
-v /portainer_data:/data是将容器的/data目录映射到主机的/portainer_data目录(这个路径可以随便自定义),用于持久化保存Portainer本身的一些数据。
-v /var/run/docker.sock:/var/run/docker.sock就是将容器的/var/run/docker.sock映射到主机的/var/run/docker.sock,用于直接和主机的docker守护进程进行通信,来管理当前主机上的docker。

在OMV或者debian之类LINUX系统的docker上部署Portainer用上面这条命令就可以了。但是!在群晖或者威联通的NAS的docker管理器上,是没有办法直接映射/var/run/docker.sock的,虽然也可以用命令行运行上面那行命令来部署Portainer,但是我并不建议这么做,因为在群晖和威联通NAS上,通过映射/var/run/docker.sock来和主机的docker守护进程进行通信似乎会有一些问题,可能是和群晖与威联通NAS自带的docker管理器有冲突。

如果要在群晖或者威联通NAS上部署Portainer,推荐的方法是:创建时只需要映射9000端口和/data目录即可,不需要映射主机的/var/run/docker.sock,然后等到Portainer运行起来以后,我们再通过TCP协议连接docker API去和docker守护进程进行通信。如图设置:

然后启动docker,就可以用http://ip:9000来访问Portainer了。首先设置好管理员密码:

然后会来到连接docker终端的界面:

如果之前在创建这个Portainer容器的时候,映射了本地主机的/var/run/docker.sock,就可以选择Local,然后点击连接即可连上本地主机的docker服务。如果没有映射本地主机的/var/run/docker.sock,则需要选择Remote,然后设置Endpoint URL来连接。

所以下面就开始说明Portainer怎么连接到群晖和威联通的docker服务吧。

Portainer连接群晖docker服务进行管理

首先我们需要让群晖的docker服务允许通过TCP进行连接。用SSH连到群晖的命令行上,编辑/var/packages/Docker/etc/dockerd.json这个文件:

sudo vi /var/packages/Docker/etc/dockerd.json

添加此行:

"hosts" : [ "tcp://192.168.0.233:2375", "unix:///var/run/docker.sock" ],

其中的IP需要改成你的群晖主机的IP地址,然后用:wp保存。接下来重启群晖的docker服务:

synoservice --restart pkgctl-Docker

这时我们就可以在Portainer上通过TCP协议连接群晖的docker API了。在之前的连接docker终端的界面,Name随便填写,Endpoint URL填写群晖的ip和端口2375,TLS选择关闭,然后点击Connect按钮就连接上了。

进入Portainer后台就能看到群晖上的docker服务,并进行管理了:

如果要在已经连接到本地docker服务或者其他docker服务的Portainer上添加群晖docker服务,可以在Portainer后台菜单中选择Endpoints,然后点击Add endpoint:

Environment type选择Docker,和前面说的一样,设置Name和Endpoint URL,TLS选择关闭,然后点击Add endpoint按钮,就把群晖docker服务添加到了Portainer的管理列表。

Portainer连接威联通docker服务进行管理

威联通NAS的Container Station直接提供了远程访问和管理docker的方法,并且支持TLS,所以就算是外网访问和管理也是比较安全的。从这点也可以看出威联通在虚拟化方面做的要比群晖更加专业一些。

首先打开威联通NAS的Container Station,选择菜单的属性,然后选择Docker凭证。点击下载按钮,将证书cert.zip文件下载到电脑上并解压,然后再把cert.zip文件上传到威联通NAS的共享文件夹中。

用SSH连接到威联通的命令行,用cd进入保存了cert.zip证书文件的目录。用以下命令创建docker的证书文件夹:

mkdir -pv ~/.docker

解压证书文件到该文件夹:

unzip cert.zip -d ~/.docker

设置环境变量:

export DOCKER_HOST=tcp://192.168.0.112:2376 DOCKER_TLS_VERIFY=1

其中的IP需要改成你的威联通NAS的IP地址。

接下来就去Portainer去添加威联通NAS的docker服务吧。依然是在Portainer后台菜单中选择Endpoints,然后点击Add endpoint。按照以下设置:

  • Environment type选择Docker
  • Name可以随便设置
  • Endpoint URL填写威联通的ip和端口2376
  • 打开TLS
  • 上传之前解压出来的证书文件:
    TLS CA certificate上传ca.pem文件;
    TLS certificate上传cert.pem文件;
    TLS key上传key.pem 文件

最后点击Add endpoint按钮,就把威联通NAS上的docker服务添加到了Portainer的管理列表。

似乎应该有个结语

Portainer功能非常强大,基本上可以实现对docker的各种操作。用Portainer来统一管理各台设备上的docker服务,可以很大的提升便利性和实用性,强烈推荐给NAS和虚拟化玩家们。

声明:爱玩咖 – 生命在于折腾|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 家庭云不一样的玩法:集中管理群晖与威联通NAS上的docker服务


Carpe Diem and Do what I like