Docker与IPv6
背景介绍¶
随着 IPv6 的普及如今家用宽带基本上都是自带外网的 IPv6 资源的。IPv6 资源分发到每个家里可以理解是一个资源池,哪怕光猫下面连接路由器,路由器下面再接一些设备,也可以保证这些设备也获取到独立的公网 IPv6 地址。那么该如何充分利用这些 IPv6 资源呢?下面国光就简单介绍一下如何让群晖的 Docker 充分利用 IPv6 资源。
抛出问题¶
Docker 自带的 bridge 网桥默认是不支持 IPv6 的:
这就导致了我们下图传统方法通过 bridge 映射的 8443 和 8080 端口无法被 IPv6 网络访问,只能走 IPv4 网络:
从 DSM7 开始群晖官方也不建议我们去修改 Docker 的配置文件,而且考虑到 IPv6 的地址可能会发生变化,我们如果直接去编辑 Docker 配置文件,强开 IPv6 的话也并不是一个很优雅的方式。这里其实我们除了使用 host 网络类型,其实我们还有别的选择,就是自带的 Web Station 套件。
部署方式 | 优点 | 缺点 |
---|---|---|
Host 网络类型 | 简答方便 | 不能灵活设置端口 |
Web Station 套件 | 有点繁琐 | 可灵活设置映射到宿主机的端口 |
下面国光来就来分别以实际演示一下这两张让 Docker 获取 IPv6 的方法在群晖系统中的实际应用。
系统介绍¶
下面就实战演示一下,如果使用群晖 NAS 搭建一些常用的系统,并配置 IPv6 网络正常访问。先来看看我们接下来要部署哪些系统吧:
这些是我的 NAS 目前安装的系统,个人觉得这些系统 NAS 上通过 Docker 部署还是很方便的,当然还有其他不错的服务也可以 Docker 部署,下面就不一一列举了:
镜像名 | 说明 |
---|---|
jeessy/ddns-go | 简单方便的动态解析工具,支持多个系统平台和多个云厂商 |
talebook/talebook | 基于 Calibre 魔改的简约美观的个人图书管理系统 |
xhofe/alist | 支持接管管理各大网盘的系统 |
ddns-go - 动态解析¶
ddns-go 默认的端口为 9876 端口,不会占用群晖 NAS 的 80 端口,而且 Linux 下的 Docker 也支持 host 类型的网络模式,ddns-go 官方也建议我们使用 Docker 来部署搭建:
默认大家都是有 Docker 基础的,国光简单解释一下几个参数的作用:
--restart=always:表示随 Docker 服务启动就开启自启这容器
--net=host :表示使用 host 网络,即和主机共享 IP,这样就可以获取到公网的 IPv6 地址
考虑到我的个人情况,国光将群晖本地的 /volume5/docker/ddns-go 文件夹挂载到 ddns-go 容器的 /root 目录下:
ddns-go 的使用非常简单,首先填写我们域名厂商的 AK 和 SK 即可:
因为国光的家庭带宽无公网的 IPv4,所以这里只开启 IPv6 地址:
- 一般来说通过网卡获取的 IPv6 地址要准确一点
- Domains 直接填写我们想要解析的 IPv6 地址即可,DDNS-GO 会自动带着我们的 AK 和 SK 去控制台帮我们添加解析记录
至此我们的操作就完成了,从 ddns-go 系统网页右侧也可以看到解析日志的一些细节:
然后我们就可以使用我们 ddns-go 解析配置的域名直接访问我们的群晖 NAS 系统了:
talebook - 图书管理¶
因为 talebook 默认的也是 80 端口,所以我们不能直接使用 host 网络类型直接部署了,如果我们使用传统 -p 桥接类的话:
这样就会导致我们的容器无法使用 IPv6,只可以通过 IPv4 访问,这样就减少了很多便利性。所以接下来我们需要 Web Station 套件出场了。
首先选择 bridge 网络类型:
接着重点来了,这里选择「通过 Web Station 启动网页门户」,然后我们根据镜像开的端口数目,自己添加对应的端口,这里的 80 是容器本身预设的端口:
为了不用每次重启服务都要手动启动容器,我们这里还勾选了「启用自动重新启动」 。从下一步可以看出来我们的 80 端口会被b本地的 Web Station 进行管理:
根据 talebook 官方说明,我们添加一个本地的文件映射到容器的 /data 目录下:
接着会引导我们到 Web Station 继续配置端口:
选择「基于端口」的门户类型,然后将容器的 80 端口绑定到 NAS 的 8080 端口:
继续添加新的端口效果如下:
我们就可以使用上一小节的 DDNS IPv6 域名直接访问安装我们的 tablebook 图书管理系统了:
接来来追求完美我们新增 1 个 book 子域名,使用 DDNS IPv6 动态解析:
这样也可以使用 book 这个子域名来访问我们的图书管理系统:
alist - 网盘接管¶
同理其他系统搭建也是换汤不换药,国光我就不在啰里八嗦从盘古开天辟地开始讲了,下面只讲一下 alist 服务的关键操作。
还是通过「Web Station」来接管容器的 Web 端口:
然后根据官方文档,在高级设置配置变量:
添加共享文件夹映射到容器的 /opt/alist/data
目录:
第一次启动可以在日志里面查看默认密码:
然后就可以愉快的通过 IPv6 的 DDNS 使用 alist 啦: