对 volumes_from 和 docker-compose.yml 中的卷使用感到困惑
Confused about volumes_from and volumes usage in docker-compose.yml
我正在尝试了解 - 也许我已经做过也许还没有 - volumes_from
和 volumes
在 docker-compose.yml
文件中的用法之间的差异。我已经阅读了文档,但我不太清楚,所以我正在做一个真正的练习。
我有以下设置:
- 根目录
- 一个名为
php-apache
的目录,在 root 下有一个 Dockerfile
- 一个名为
mongo
的目录,在 root 下有一个 Dockerfile
- 一个
docker-compose.yml
根目录下的文件
Note: If it's not clear to you, take a look here and everything exposed down below is right there as well (mongodb-test
branch)
在 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:/data
- 图像
reynierpm/mongodb
将向外暴露/data/db
并在内部映射到/data/configdb
然后/data/db
映射到~/data/mongo:/data/db
31=] 图片.
现在我脑子里一片混乱,因为我想要实现的是:
- Keep 将主机上的代码映射到容器(这一行
<path_on_host>:/var/www
on docker-compose.yml
)
- 将数据保存在主机的本地目录中
所以,我在做什么很好?由于我还在学习中,请随时在此设置上进行任何修改。
The image reynierpm/php55-dev will expose a /data directory and this will be mapped to ~data:/data in tianon/true image
最好说它将映射到 docker 主机上的 ~/data
。请注意,第二卷也会有一个/data/db
。
The image reynierpm/mongodb will expose a /data/db to the outside and mapped to /data/configdb internally then the /data/db is mapped to ~/data/mongo:/data/db in tianon/true image.
此容器与 php-apache 的容量相同
volume_data 容器。
如果您的目标是:
如果您的代码在 ~/mni/
中,则没有问题。您正在将 mongoDB 数据库目录安装到 php-apache 容器,我认为您不需要那个。
您需要为您的容器连接或 link 个容器(旧版)创建一个 user defined network
。创建用户定义的网络:
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>
请注意,您必须通过网络应用程序的名称调用 mongo 容器,在您的例子中是 mongodb
。
我正在尝试了解 - 也许我已经做过也许还没有 - volumes_from
和 volumes
在 docker-compose.yml
文件中的用法之间的差异。我已经阅读了文档,但我不太清楚,所以我正在做一个真正的练习。
我有以下设置:
- 根目录
- 一个名为
php-apache
的目录,在 root 下有一个 - 一个名为
mongo
的目录,在 root 下有一个 - 一个
docker-compose.yml
根目录下的文件
Dockerfile
Dockerfile
Note: If it's not clear to you, take a look here and everything exposed down below is right there as well (
mongodb-test
branch)
在
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
图像 中的 - 图像
reynierpm/mongodb
将向外暴露/data/db
并在内部映射到/data/configdb
然后/data/db
映射到~/data/mongo:/data/db
31=] 图片.
~data:/data
现在我脑子里一片混乱,因为我想要实现的是:
- Keep 将主机上的代码映射到容器(这一行
<path_on_host>:/var/www
ondocker-compose.yml
) - 将数据保存在主机的本地目录中
所以,我在做什么很好?由于我还在学习中,请随时在此设置上进行任何修改。
The image reynierpm/php55-dev will expose a /data directory and this will be mapped to ~data:/data in tianon/true image
最好说它将映射到 docker 主机上的 ~/data
。请注意,第二卷也会有一个/data/db
。
The image reynierpm/mongodb will expose a /data/db to the outside and mapped to /data/configdb internally then the /data/db is mapped to ~/data/mongo:/data/db in tianon/true image.
此容器与 php-apache 的容量相同 volume_data 容器。
如果您的目标是:
如果您的代码在 ~/mni/
中,则没有问题。您正在将 mongoDB 数据库目录安装到 php-apache 容器,我认为您不需要那个。
您需要为您的容器连接或 link 个容器(旧版)创建一个 user defined network
。创建用户定义的网络:
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>
请注意,您必须通过网络应用程序的名称调用 mongo 容器,在您的例子中是 mongodb
。