【问题标题】:Confused about volumes_from and volumes usage in docker-compose.yml对 docker-compose.yml 中的volumes_from和volumes使用感到困惑
【发布时间】:2016-11-01 14:37:27
【问题描述】:

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

我有以下设置:

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

注意:如果您不清楚,请查看here,下面暴露的所有内容也都在那里(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:/data
  • 图像reynierpm/mongodb 将向外部公开/data/db 并在内部映射到/data/configdb,然后/data/db 映射到tianon/true 图像中的~/data/mongo:/data/db

现在我脑子里一团糟,因为我想要实现以下目标:

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

那么,我在做什么没问题?由于我仍在学习,请随意对此设置进行任何修改。

【问题讨论】:

    标签: docker docker-compose dockerfile docker-volume


    【解决方案1】:

    图像 reynierpm/php55-dev 将暴露一个 /data 目录,这将映射到 tianon/true 图像中的 ~data:/data

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

    图像 reynierpm/mongodb 会将 /data/db 暴露给外部并在内部映射到 /data/configdb 然后 /data/db 映射到 ~/data/mongo:/data/db 在 tianon/true 图像.

    这个容器在体积方面与 php-apache 相同 volume_data 容器。

    如果您的目标是:

    如果您的代码在~/mni/ 中,您就可以了。您正在将 mongoDB 数据库目录安装到 php-apache 容器,我认为您不需要。

    您需要为您的容器连接或链接容器(旧版)创建一个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>
    

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

    【讨论】:

    • 您能否使用user defined network 添加可能的设置,因为根据您的回答,链接是旧版?我应该能够从 PHP-Apache 容器访问任何 Mongo DB 我认为这就是你所说的
    • 好的,你能给我你的源图像名称吗?所以我也可以测试设置?
    • 您需要的一切都在存储库中。我还没有创建 Mongo DB 映像,所以您可能想要删除 image 并添加 build 语句。图片reynierpm/php55-dev 已经在 Dockerhub 上
    • 我还没有测试过docker文件。
    • 这个 docker 文件对我来说运行良好,我们将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多