如何从同一个docker容器/卷的两个不同版本安装数据?

时间:2017-02-10 18:10:17

标签: docker docker-compose docker-volume

我正在为nodejs,nginx和一些静态网络数据使用单独的docker容器编写一个Web应用程序。

我想访问两个不同版本的网络数据。我的第一个想法是创建一个仅数据容器,然后将数据目录挂载到nginx容器中的两个不同位置

静态数据的Dockerfile类似于:

FROM ubuntu

RUN mkdir -p /data
ADD build/* /data/

我希望能够创作它,做类似的事情:

nginx-site:
    image: my-nginx-image:version
    ports:
    - "80:80"
    volumes_from:
    - data-version-1
    - data-version-2
    links:
    - node-app

node-app:
    image: my-node-app-image:version
    ports:
    - "5000:5000"

data-version-1:
    image: my-data-image:version1
    volume:
    - /data1:/data

data-version-2:
    image: my-data-image:version2
    volume:
    - /data2:/data

但我认为我完全误解了音量增加。 / data1,/ data2卷来自主机,而不是将两个不同的目录从数据容器挂载到nginx容器中。

(即使它不是最好的模式,如果我不想拥有两个版本的数据,这一切都可以正常工作)

我还阅读了有关do​​cker数据量的内容,但我想知道是否会遇到同样的问题。

1 个答案:

答案 0 :(得分:1)

使用数据容器阅读问题不是最好的方法。我会将version 2 volumes用于docker-compose。您的所有服务都嵌套在services密钥下,我们会在创建卷的位置添加新的顶级volumes密钥。然后我们使用我们想要访问卷的服务下的卷密钥正常挂载卷。请参阅修订后的撰写文件:

version: "2" services: nginx-site: image: my-nginx-image:version ports: - "80:80" volumes: - data1:/var/www/html/data1 - data2:/var/www/html/data2 links: - node-app node-app: image: my-node-app-image:version ports: - "5000:5000" volumes: data1: driver: local data2: driver: local

  • 请注意启用这些功能的版本密钥
  • 我假设您希望在/var/www/html下的nginx容器中有两个不同的可访问目录根据需要进行调整
  • 此方法不会将文件夹暴露给主机如果需要,请参阅下面的下一个修订
  • 通过使用版本2卷,我们不再拥有死数据容器,我们的数据将在主机上的/var/lib/docker内抽象出来。

version: "2" services: nginx-site: image: my-nginx-image:version ports: - "80:80" volumes: - ./data1:/var/www/html/data1 - ./data2:/var/www/html/data2 links: - node-app node-app: image: my-node-app-image:version ports: - "5000:5000"

  • 这会在您的data1文件所在的目录中创建两个目录data2docker-compose.yml,以便您可以根据需要添加内容,它们将显示在容器中。 请注意添加./以表示当前目录

我希望这有助于澄清事情

迪伦

修改

您可以通过指定相同的卷但使用不同的装载路径将相同的卷数据装入两个不同的目录中。例如,data1:/var/www/html/data1data1:/var/www/html/data2会在两个文件夹

中安装相同的卷数据