【问题标题】:Share docker volumes from multiple hosts?从多个主机共享 docker 卷?
【发布时间】:2018-10-09 03:21:32
【问题描述】:

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


    【解决方案1】:

    如果您的 docker 容器在同一主机上运行,​​那么这很容易。您只需(在我的示例中作为 run 的一部分,但可以独立创建)创建一个卷并将其安装在两个容器上。

    # Create a volume /data in a new container
    $ docker run \
      -v /data \
      -it \
      --name mycontainer \
      ubuntu \
      /bin/bash
    root@435cb561e0eb:/# touch /data/test
    

    然后在另一个 shell 中我启动另一个 ubuntu 容器(不一定是 ubuntu,可以是不同的镜像):

    # Mount the same volume in another container
    $ docker run \
      --volumes-from mycontainer \
      -it \
      ubuntu \
      /bin/bash
    root@de70d474df7a:/# ls /data/
    test
    

    然后您只需要确保您的应用程序的 Web 部分使用该挂载(在本例中为/data)来存储您需要在两个主机之间共享的数据。

    至于多台主机之间。 Docker 不这样做,但可以在 NFS 或其他东西之上构建。

    【讨论】:

      【解决方案2】:

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

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

      典型的自托管解决方案是使用 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 地址都可以是主机名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-04
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        • 2015-03-03
        相关资源
        最近更新 更多