主机信息

hostname IP 服务
nfs-server 172.16.1.16 Docker+NFS
nfs-client 172.16.1.17 Docker

部署NFS

1
[root@nfs-server ~]# yum -y install nfs-utils rpcbind

创建共享目录

1
[root@nfs-server ~]# mkdir -p /data/nfs/docker

将共享目录写入到配置文件

1
2
3
4
5
[root@nfs-server ~]# vim /etc/exports
/data/nfs/ *(rw,no_root_squash,sync)
[root@nfs-server ~]# exportfs -r
[root@nfs-server ~]# systemctl start rpcbind nfs-server
[root@nfs-server ~]# systemctl enable rpcbind nfs-server

验证共享

1
2
3
[root@nfs-client ~]# showmount -e 172.16.1.16
Export list for 192.168.1.12:
/data/nfs *

创建nfs存储卷容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@nfs-server ~]# docker volume create --driver local \
--opt type=nfs --opt o=addr=172.16.1.16,rw \
--opt device=:/data/nfs --name volume-nfs
volume-nfs
# 参数解释
--driver , -d local # 指定卷驱动程序名称,local为默认
--name # 指定卷名
--opt , -o # 设置驱动程序特定选项

[root@nfs-server ~]# docker volume ls
DRIVER VOLUME NAME
local volume-nfs

[root@nfs-server ~]# docker volume inspect volume-nfs
[
{
"CreatedAt": "2020-03-31T21:07:36+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/volume-nfs/_data",
# volume-fs的挂载点
"Name": "volume-nfs",
"Options": {
"device": "/data/nfs", # nfs共享目录
"o": "addr=172.16.1.16,rw", # nfs服务器地址
"type": "nfs" # 驱动类型
},
"Scope": "local"
}
]

使用volume-nfs连接容器

1
2
3
4
5
6
7
[root@nfs-server ~]# docker run -itd --name bbox1 --volume volume-nfs:/nfs busybox
[root@nfs-server ~]# docker exec -it bbox1 /bin/sh
/ # cd /nfs/docker/
/nfs/docker # ls
/nfs/docker # echo "hello world" > aaa
/nfs/docker # ls
aaa

查看共享目录

1
2
3
[root@nfs-server ~]# cd /data/nfs/docker/
[root@nfs-server docker]# ls
aaa

查看容器挂载点

1
2
3
4
5
[root@nfs-server ~]# docker inspect -f {{.Mounts}} bbox1
[{volume volume-nfs /var/lib/docker/volumes/volume-nfs/_data /nfs local z true }]

[root@nfs-server ~]# df -h | grep /data/nfs
:/data/nfs 46G 5.7G 40G 13% /var/lib/docker/volumes/volume-nfs/_data