从多个主机共享docker卷?

从多个主机共享docker卷?,docker,Docker,似乎表明命名卷和基于路径的卷都存储在docker主机(运行容器的地方)中 假设我有web和nginx服务 我想我可以在一台主机上运行web服务,在另一台主机上运行nginx(两台不同的机器)。 (虽然我刚刚开始学习docker的基础知识,而且要将服务分离到不同的主机还需要很长时间) 有没有办法让nginx容器通过在两个容器之间共享卷来为web服务的静态文件提供服务?如果您的docker容器在同一台主机上运行,那么这是非常容易的。您只需(在我的示例中,作为运行的一部分,但可以独立创建)创建一个卷并

似乎表明
命名卷
基于路径的卷
都存储在docker主机(运行容器的地方)中

假设我有
web
nginx
服务

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


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

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

# 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,可以是不同的图像):

然后,您只需要确保应用程序的web部件使用该装载(
/data
,在本例中)来存储需要在两台主机之间共享的数据


至于在多个主机之间。Docker没有做到这一点,但可以在NFS或其他平台上实现这一点。

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

您可以使用第三方存储解决方案。如果您是云提供商,他们的解决方案通常是最适合您的用例的。对于自托管软件解决方案,您可以使用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地址中的IP地址都可以是主机名

  # 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"
  ...