在 Docker 中使用 JuiceFS
提示:本案例使用的是 JuiceFS 云服务。如果你使用的是 JuiceFS 开源客户端,请参考这篇文档。
JuiceFS 可以通过 volume plugin 与 Docker 引擎集成。
安装插件
通过下面的命令安装插件,按照提示为 FUSE 提供必要的权限。
$ docker plugin install juicedata/juicefs
Plugin "juicedata/juicefs" is requesting the following privileges:
- network: [host]
- device: [/dev/fuse]
- capabilities: [CAP_SYS_ADMIN]
Do you grant the above permissions? [y/N] y
latest: Pulling from juicedata/juicefs
bb7fe456a3d7: Download complete
Digest: sha256:e49817cdde62aa0596e5d61cbb805ee04c5921322ec696ddfc5e92d0ece4562f
Status: Downloaded newer image for juicedata/juicefs:latest
Installed plugin juicedata/juicefs
创建 Volume
创建新的 Volume 时需要提供 JuiceFS 文件系统名称、密钥以及对象存储的访问凭据,例如
$ docker volume create -d juicedata/juicefs -o name=$JFS_NAME -o token=$JFS_TOKEN -o accesskey=$ACCESS_KEY -o secretkey=$SECRET_KEY jfsvolume
JFS_TOKEN
可以在 JuiceFS 控制中心的设置页面里找到,例如 <https://juicefs.com/console/vol/>\<jfs_name>/setting
挂载 Volume
在 Docker 中挂载 Volume 的方法如下所示:
$ docker run -it -v jfsvolume:/jfs busybox ls /jfs
删除 Volume
$ docker volume remove jfsvolume
注意
- volume 必须处于未被挂载状态才能正常删除。
- 删除 volume 不影响对应的 JuiceFS 上的数据,只是从 Docker Engine 中移除
卸载插件
$ docker plugin disable juicedata/juicefs
$ docker plugin remove juicedata/juicefs
通过 docker-compose 挂载
下面是使用 docker-compose
挂载 JuiceFS 文件系统的例子
version: '3'
services:
busybox:
image: busybox
command: "ls /jfs"
volumes:
- jfsvolume:/jfs
volumes:
jfsvolume:
driver: juicedata/juicefs
driver_opts:
name: ${JFS_NAME}
token: ${JFS_TOKEN}
accesskey: ${ACCESS_KEY}
secretkey: ${SECRET_KEY}
敏感信息可以通过环境变量传入。
启动服务:
docker-compose up
关闭服务并从 Docker 中卸载 JuiceFS 文件系统:
docker-compose down --volumes
在 Docker swarm 中使用
JuiceFS 文件系统支持多节点的 Docker swarm 集群。
首先确保 juicedata/juicefs
插件在 所有 工作节点上安装并启用。
JuiceFS 的挂载参数通过 --mount
指定,如下面的例子所示。
docker service create --name nginx --mount \
type=volume,volume-driver=juicedata/juicefs,source=jfsvolume,destination=/jfs,\
volume-opt=name=$JFS_VOL,volume-opt=token=$JFS_TOKEN,volume-opt=accesskey=$ACCESS_KEY,volume-opt=secretkey=$SECRET_KEY nginx:alpine