首页 > 解决方案 > 从多个主机共享 docker 卷?

问题描述

https://nickjanetakis.com/blog/docker-tip-28-named-volumes-vs-path-based-volumes

似乎表明两者named volumespath based volumes存储在 docker 主机中(容器运行的地方)

假设我有webnginx服务。

我以为我可以web在一台主机和nginx另一台主机(两台不同的机器)上运行服务。(虽然我刚刚开始学习 docker 的基础知识,而且我还需要很长时间才能将服务分离到不同的主机)

容器有没有办法通过在两者之间共享卷nginx来提供服务所具有的静态文件?web

标签: docker

解决方案


Docker 还没有内置的基于软件的解决方案来跨多台机器共享卷。有关于infinit的工作,但他们还没有发布任何用于生产用途的东西。

您可以使用第三方存储解决方案。如果您使用的是云提供商,他们的解决方案通常最适合您的用例。对于自托管软件解决方案,您可以使用 glusterfs 之类的东西。自己处理数据复制的应用程序是容器的想法,例如 cockroachdb。

典型的自托管解决方案是依靠 NFS。即使是云提供商,我通常也会使用他们的 NFS 方法来挂载存储。从 docker 来看,这如下所示:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=192.168.1.1,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=192.168.1.1,rw
        device: ":/path/to/dir"
  ...

请注意,只要您保留 nfs 的类型,每个 IP 地址都可以是主机名。


推荐阅读