对docker-compose.yml中的volumes_from和volume的使用感到困惑

我正在试图了解 – 也许我已经做了 – volumes_from docker-compose.yml文件中volumes_fromvolumes_from用法之间的区别。 我已经阅读了文档,但从那里不是很清楚,所以我正在做一个真正的练习。

我有以下设置:

  • 一个根目录
  • 一个名为php-apacheDockerfile下有一个Dockerfile
  • 一个名为mongo的目录,在根目录下有一个Dockerfile
  • 根目录下docker-compose.yml文件

注意:如果你不清楚,看看这里 ,下面的所有东西都在那里( mongodb-test分支)

  • php-apache/Dockerfile我有以下条目:

     VOLUME /data /data 
  • mongo/Dockerfile我有以下条目:

     VOLUME /data/db /data/configdb 
  • docker-compose.yml我有以下内容:

     version: '2' services: php-apache: container_name: "php55-dev" image: reynierpm/php55-dev ports: - "80:80" environment: PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE' volumes: - ~/mmi:/var/www volumes_from: - volumes_data mongo: container_name: "mongodb" image: reynierpm/mongodb ports: - "27017:27017" volumes_from: - volumes_data volumes_data: image: tianon/true volumes: - ~/data/mongo:/data/db - ~/data:/data 

这是我从这个设置了解到的:

  • 图像reynierpm/php55-dev将暴露一个/data目录,这将被映射到tianon/true ~data:/datatianon/true图像
  • 图像reynierpm/mongodb会将/data/db暴露给外部,并在内部映射到/data/configdb然后将/data/db映射到tianon/true映像中的~/data/mongo:/data/db

现在我的脑海里一片混乱,因为我想达到的是以下几点:

  • 保持主机上的代码映射到容器( <path_on_host>:/var/www docker-compose.yml上的这一行<path_on_host>:/var/www
  • 将数据保存在主机的本地目录中

所以,我正在做什么? 由于我还在学习,所以请随时在这个设置上做任何修改。

图像reynierpm / php55-dev将暴露一个/ data目录,这将被映射到〜data:/ data在天雄/真实图像

最好说它将映射到docker主机上的~/data 。 请注意,第二卷也会有一个/data/db

图像reynierpm / mongodb会将/ data / db暴露给外部,并在内部映射到/ data / configdb,然后将/ data / db映射到tianon / true映像中的〜/ data / mongo:/ data / db。

根据volume_data容器的容量,这个容器将与php-apache相同。

如果你的目标是:

如果你的代码在~/mni/你没事的话。 你正在加载mongoDB数据库目录到php-apache容器,我不认为你需要这个。

您需要为您的容器连接或链接容器(传统)创builduser defined network 。 要创build用户定义的networking:

 docker network create --driver bridge <yournetwork name> 

你不需要一个DOC。 这就是为什么我删除了第三个容器。 我也修复了不必要的卷映射。

更新的Docker文件:

 version: '2' services: php-apache: container_name: "php55-dev" image: reynierpm/php55-dev ports: - "80:80" environment: PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE' volumes: - ~/mmi:/var/www volumes_from: - volumes_data mongo: container_name: "mongodb" image: reynierpm/mongodb ports: - "27017:27017" volumes_from: - volumes_data volumes_data: image: tianon/true volumes: - ~/data/mongo:/data/db - ~/data:/data networks: default: external: name: <your network name> 

请注意,您必须从您的web应用程序的名称调用您的mongo容器,在您的情况下mongodb