代码之家  ›  专栏  ›  技术社区  ›  ReynierPM

对docker-compose.yml中的volumes_from和volumes用法感到困惑

  •  1
  • ReynierPM  · 技术社区  · 8 年前

    我试图理解-也许我已经理解了,也许还没有-两者之间的区别 volumes_from volumes 用法 docker-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 在内部 /数据/db 映射到 ~/data/mongo:/data/db 在里面 蒂农/真 形象

    我现在头脑一片混乱,因为我想要实现的是以下几点:

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

    所以,我在做什么没关系?请随意修改此设置,因为我仍在学习。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Farhad Farahi    8 年前

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

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

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

    该容器与php apache的容量相同 volume_data容器。

    如果您的目标是:

    如果您的代码在 ~/mni/

    您需要创建一个 user defined network 用于您的容器连接或链接容器(传统)。要创建用户定义的网络:

    docker network create  --driver bridge <yournetwork name>
    

    你不需要医生。这就是为什么我移除了第三个容器。我还修复了不必要的卷映射。

    更新的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 .

    推荐文章