1

我试图理解——也许我已经做过,也许没有——文件之间的区别volumes_fromvolumes用法docker-compose.yml。我已经阅读过文档,但从那里开始对我来说不是很清楚,所以我正在做一个真正的练习。

我有以下设置:

  • 一个根目录
  • 以根目录命名php-apache的目录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目录,并将映射到~data:/data图像tianon/true
  • 图像reynierpm/mongodb将 a 暴露/data/db给外部并映射到/data/configdb内部,然后/data/db映射到~/data/mongo:/data/db图像中tianon/true

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

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

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

4

1 回答 1

0

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

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

图像 reynierpm/mongodb 将向外部公开 /data/db 并在内部映射到 /data/configdb 然后 /data/db 映射到 ~/data/mongo:/data/db 在 tianon/true 图像中。

此容器在 volume_data 容器的卷方面与 php-apache 相同。

如果您的目标:

如果您的代码在其中,~/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

于 2016-11-01T15:28:14.503 回答