在各个平台,或本地使用 时,一定会遇到一些容器,想让它们的储存同步到云端,方便以后新建容器时好继承上一个容器的储存。本文会教大家如何安装 作为 插件,以方便使用各个云平台作为容器储存卷。*本文提到的若未明确表达均指代 。部分内容来自 https://rclone.org/docker/
你需要准备一个有 以上的环境,推荐 可以使用 查看你当前安装的 Docker 版本。并安装 (可选):
Client:
Version: 20.10.17+azure-1
API version: 1.41
Go version: go1.17.11
Git commit:
Built: Mon Jun 6 21:36:39 UTC 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.17+azure-1
API version: 1.41 (minimum version 1.12)
Go version: go1.17.11
Git commit:
Built: Mon Jun 6 22:32:38 2022
OS/Arch: linux/amd64
Experimental: false 开始:
首先你需要在你的 主机(VPS等) 安装 FUSE 模块,这是必要的!
sudo apt-get -y install fuse 创建两个 rclone docker plugin 的数据缓存文件夹(默认)
sudo mkdir -p /var/lib/docker-plugins/rclone/config
sudo mkdir -p /var/lib/docker-plugins/rclone/cache 为你的docker安装插件
docker plugin install rclone/docker-volume-rclone:amd64 args="-v" --alias rclone --grant-all-permissions
docker plugin list #查看插件列表 出现NAME=rclone:latest;ENABLED=true 说明安装并启用成功了 你可以根据需求,更换 rclone.conf 及 cache 文件夹
docker plugin disable rclone #禁用rclone插件
docker plugin set rclone RCLONE_VERBOSE=2 config=/root/.config/rclone cache=/tmp/rclone args="--vfs-cache-mode=writes --allow-other" #配置文件夹及缓存文件夹
docker plugin enable rclone #启用rclone插件
docker plugin inspect rclone #查看插件配置 挂载流程:
创建 sftpvolume 卷( sftpvolume为储存卷名 )
docker volume create sftpvolume -d rclone -o type=sftp -o sftp-host=_hostname_ -o sftp-user=_username_ -o sftp-pass=_password_ -o allow-other=true 创建使用 sftpvolume 卷的容器
docker run --rm -it -v sftpvolume:/mnt --workdir /mnt ubuntu:latest bash
# sftpvolume:/mnt 指的是:你SFTP中 /mnt 目录(和原版rclone是一样)
# --workdir /mnt 指的的:容器内部目录 /mnt 如果一切配置正确的话,你会进入到这个新的容器。你可以输入命令查看 /mnt 内容
*Rclone官方示例 为 Google Drive 我们这里用 Onedrive 做演示
在另外任意一台机器,创建你想挂载的网盘,比如 Onedrive,将生成的 rclone.conf 配置文件 移动到你 主机(VPS等) 的 /var/lib/docker-plugins/rclone/config/rclone.conf 目录(默认:如果没有走安装流程的第四步,就是一开始 mkdir 的文件夹) 附录:创建网盘教程 配置文件看起来应该是下面这样(onedrive):
[oodrive]
type = onedrive
client_id = 180xxxx2-0114-xxxxaf31-24aaxxxxx0cb
client_secret = Xik7Q~JxxxxxoaO8aKxxxxxvclxlxxxxx8
token = {"access_token":"xxx","expiry":"2022-05-04T07:30:31.869533611+08:00"}
drive_id = b!xxxxxxxx-SdYUkcM9xT9TKp
drive_type = business 创建一个文件名为 example.yml 的 docker swarm stack:
version: '3'
services:
heimdall:
image: linuxserver/heimdall:latest
ports: [8080:80]
volumes: [configdata:/config]
volumes:
configdata:
driver: rclone
driver_opts:
remote: 'oodrive:heimdall'
allow_other: 'true'
vfs_cache_mode: full
poll_interval: 0 运行这个stack
docker stack deploy example -c ./example.yml 在一段时间后,会创建 example_heimdall 服务并在8080端口启动,你可以使用以下指令查看
docker service ls
docker service ps example_heimdall
docker volume ls 在测试结束后你可以使用 docker stack remove example 移除服务,使用 docker volume remove example_configdata 移除储存卷。
docker volume create vol1 -d rclone -o remote=storj: -o vfs-cache-mode=full
docker volume create vol2 -d rclone -o remote=:storj,access_grant=xxx:heimdall
docker volume create vol3 -d rclone -o type=storj -o path=heimdall -o storj-access-grant=xxx -o poll-interval=0 使用Docker Swarm 或Docker Compose
volumes:
volume_name_1:
driver: rclone
driver_opts:
remote: 'oodrive:'
allow_other: 'true'
vfs_cache_mode: writes
token: '{"type": "borrower", "expires": "2021-12-31"}'
poll_interval: 0 实战总结:
以下为使用 compos 部署 alist 并挂载云端的配置,注意 为你的 配置文件中的网盘名字,请读完全文再抄袭!
version: '3'
services:
alistr: #服务名 alistr 任意
image: xhofe/alist:latest #容器镜像 xhofe/alist
ports: [5244:5244] #容器端口 5244
network_mode: host #网络模式 host
volumes: [adata:/opt/alist/data] #卷名 adata 挂载至容器内/ opt/alist/data
volumes: #储存卷配置:
adata: #定义上面的卷名 adata
driver: rclone #磁盘名 rclone
driver_opts: #磁盘配置
remote: oodrive:/example/alist #同步 oodrive 下 /example/alist 文件
allow_other: 'true' #类似rclone mount配置
vfs_cache_mode: writes #类似rclone mount配置
poll_interval: 0 #类似rclone mount配置
当然,你可以在每次机器启动后 手动/使用守护进程 挂载onedrive或其他rclone配置,再重启docker。但是使用插件可以大大增加效率,配置一次就能永久爽快体验。文章首发于:https://blog.learnonly.xyz/p/13d3.html 为金桔猪原创!