如何使用docker撰写v3直接在容器中安装NFS共享/卷
我有一个合成文件v3共有3个服务共享/使用相同的音量。 在使用群集模式时,我们需要创建额外的容器和卷来管理群集中的服务。
我打算使用NFS服务器,以便单个NFS共享将直接挂载到群集中的所有主机上。
我在下面找到了两种做法,但是需要在docker主机上执行额外的步骤 –
-
在主机上使用“fstab”或“mount”命令挂载NFS共享,然后将其用作Docker服务的主机卷。
-
使用Netshare插件 – https://github.com/ContainX/docker-volume-netshare
有没有一个标准的方式,我可以直接使用/装载NFS共享使用泊坞窗撰写V3通过执行只有很少/没有步骤(我明白,“nfs-common”包是必需的)在码头主机?
是的,您可以直接从撰写文件引用NFS:
volumes: db-data: driver: local driver_opts: type: nfs o: addr=$SOMEIP,rw device: "$PathOnServer"
以类似的方式,您可以在每台主机上创建一个nfs卷。
docker volume create --driver local --opt type=nfs --opt o=addr=$SomeIP,rw --opt device=:$DevicePath --name nfs-docker
在发现这是大量未记录的文件之后,下面是使用堆栈和docker撰写挂载NFS卷的正确方法。
最重要的是你需要使用version: "3.2"
或更高。 如果你不这样做,你会有奇怪的和不明显的错误。
第二个问题是卷的定义更改时不会自动更新。 这可能会导致你陷入一个兔子洞,认为你的变化是不正确的,当他们没有被应用。 确保你的docker rm VOLUMENAME
可能在任何地方,就好像卷存在一样,它不会被验证。
第三个问题是更多的NFS问题 – NFS文件夹不会在服务器上创建 ,如果它不存在。 这只是NFS的工作方式。 在做任何事情之前,你需要确定它的存在。
(不要删除'soft'和'nolock',除非你确定你知道你在做什么 – 这会阻止docker冻结,如果你的NFS服务器消失了)
这是一个完整的例子:
[root@docker docker-mirror]# cat nfs-compose.yml version: "3.2" services: rsyslog: image: jumanjiman/rsyslog ports: - "514:514" - "514:514/udp" volumes: - type: volume source: example target: /nfs volume: nocopy: true volumes: example: driver_opts: type: "nfs" o: "addr=10.40.0.199,nolock,soft,rw" device: ":/docker/example" [root@docker docker-mirror]# docker stack deploy --with-registry-auth -c nfs-compose.yml rsyslog Creating network rsyslog_default Creating service rsyslog_rsyslog [root@docker docker-mirror]# docker stack ps rsyslog ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS tb1dod43fe4c rsyslog_rsyslog.1 jumanjiman/rsyslog:latest swarm-4 Running Starting less than a second ago [root@docker docker-mirror]#
现在,在swarm-4上:
root@swarm-4:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d883e0f14d3f jumanjiman/rsyslog:latest "rsyslogd -n -f /e..." 6 seconds ago Up 5 seconds 514/tcp, 514/udp rsyslog_rsyslog.1.tb1dod43fe4cy3j5vzsy7pgv5 root@swarm-4:~# docker exec -it d883e0f14d3f df -h /nfs Filesystem Size Used Available Use% Mounted on :/docker/example 7.2T 5.5T 1.7T 77% /nfs root@swarm-4:~#
该卷将在运行堆栈的任何swarm节点上创建( 但不会被销毁 )。
root@swarm-4:~# docker volume inspect rsyslog_example [ { "CreatedAt": "2017-09-29T13:53:59+10:00", "Driver": "local", "Labels": { "com.docker.stack.namespace": "rsyslog" }, "Mountpoint": "/var/lib/docker/volumes/rsyslog_example/_data", "Name": "rsyslog_example", "Options": { "device": ":/docker/example", "o": "addr=10.40.0.199,nolock,soft,rw", "type": "nfs" }, "Scope": "local" } ] root@swarm-4:~#