困惑于docker-compose.yml

时间:2016-11-01 14:37:27

标签: docker docker-compose dockerfile docker-volume

我试图理解 - 也许我已经做过 - 可能是volumes_from文件中volumesdocker-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目录,并将其映射到~data:/data图片
  • 中的tianon/true
  • 图片reynierpm/mongodb会向外部展示/data/db并在内部映射到/data/configdb,然后/data/db会映射到~/data/mongo:/data/db tianon/true } image。

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

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

那么,我正在做什么呢?由于我还在学习,请随意在此设置中进行任何修改。

1 个答案:

答案 0 :(得分:0)

  

图片reynierpm / php55-dev将公开一个/ data目录,这将被映射到~data:/ data in tianon / true image

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

  

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

就容量来说,这个容器与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>

请注意,在您的情况mongodb中,您必须通过其名称从您的网络应用程序中调用您的mongo容器。