背景
阿里云云存储网关是一个让用户通过SMB/NFS协议访问阿里云对象存储(OSS)的产品,用户通过部署云存储网关,并在客户端挂载云存储网关提供的挂载点,就可以轻松的访问自己在OSS 对象存储桶(bucket)中的数据,非常的方便。 那么如果用户在自己的ECS中部署了容器环境,如果在容器中直接访问网关的共享呢?本文就将介绍下,在linux的docker环境中如何挂载云存储网关的NFS共享。
步骤
首先,让我们准备好存储网关的共享,我们可以根据文件网关快速入门的介绍来先创建一个文件网关,并绑定需要访问的oss bucket,在这个例子中,我们将共享名称取名为docker-volume。
接下来,我们到我们的linux客户端当中,首先使用showmount 命令,查看linux客户端是否可以访问到云存储网关的nfs 共享。
# 我们以nas共享IP地址192.168.0.76为例,可以看到showmount 输出了
# /docker-volume (everyone) 这个我们的共享名称的目录
# showmount -e 192.168.0.76
Export list for 192.168.0.76:
/docker-volume (everyone)
确定客户端访问共享没问题后,就可以为docker配置云存储网关共享作为后端存储资源了,我们运行下面的命令来基于云存储网关的nfs共享来创建一个docker volume:
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.0.76,rw \
--opt device=:/docker-volume \
sgw-docker
上边的命令中,--opt type=nfs 表示我们是创建一个nfs类型的 docker volume, ----opt o=addr=后面是云存储网关提供的共享地址,在这个例子中是192.168.0.76, rw代表是以读写的方式挂载这个共享,用户也可以根据需要将其修改为只读模式(ro) --opt device=: 后面就是云存储网关提供的挂载路径,在这个例子中,我们在云存储网关控制台配置的共享路径为/docker-volume。
运行docker volume create成功后,一个基于云存储网关nfs共享的docker volume就创建成功了,我们可以使用docker volume inspect命令来检查我们的配置, 可以看到我们取名为sgw-docker 的这个docker volume的详细配置信息。
# docker volume inspect sgw-docker
[
{
"CreatedAt": "2020-09-21T16:24:31+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/sgw-docker/_data",
"Name": "sgw-docker",
"Options": {
"device": ":/docker-volume",
"o": "addr=192.168.0.76,rw",
"type": "nfs"
},
"Scope": "local"
}
]
接下来,我们就可以在启动docker容器的时候指定这个docker volume了,我们以一个centos的docker 实例为例:
docker run -v sgw-docker:/data -ti centos:latest /bin/bash
通过上边的命令,我们以交互方式启动了一个基于centos镜像的docker实例,并将之前创建的sgw-docker 这个docker volume映射到了容器中的/data文件夹,接下来,我们在容器的/data文件夹中创建一个名为hello的测试文件,并写入测试数据:
# cd /data
# touch hello
# echo "test" > hello
# cat hello
test
然后到oss的管理控制台中,进入我们绑定了云存储网关绑定的路径中查看,我们可以看到,在linux docker容器实例中写入的数据已经写入到了对象存储(OSS)中。
通过这种方式,我们在docker容器中可以非常方便的写入和访问对象存储(OSS)中的数据,是不是非常的方便呢?大家赶快试试吧!