并行Docker上下文是否可行?

时间:2017-01-12 22:51:59

标签: docker docker-compose dockerfile

我们如何使用当前目录的子项目的项目和路径来引入docker服务并构建容器?

示例:

/ application-a     <- needs api01 & api03 (not api02)
  - .git
  - docker-compose.yml
  / src
/ application-a     <- needs api01 & api02 (not api03)
  - .git
  - docker-compose.yml
  / src

/ api01
  - .git
  - Dockerfile
  / src
/ api02
  - .git
  - Dockerfile
  / src
/ api03
  - .git
  - Dockerfile
  / src

我尝试的每条路径都会导致错误。大多数错误都在抱怨背景。

我们公司正在使用Express将大约50个Web服务从.NET移植到微服务。但是,并非所有前端和消费应用程序都需要访问所有后端服务。我们还希望限制只访问那些需要访问的项目和回购。

目标是让用户签出他们需要的api服务,然后检查他们正在处理的一个主要应用程序。源文件夹最终会在开发人员的笔记本电脑上相互平行。

我会在相关应用程序的docker-compose.yml内执行此操作...

version: '2'

services:

  api01:
    build:
      context: ..
    container_name: api01
    command:
      bash -c "npm install && nodemon"
    volumes:
      - app01/src:/var/www
    working_dir: /var/www
    ports:
      - "3000"
    networks:
      - backend

  api02:
    build:
      context: ..
    container_name: api02
    command:
      bash -c "npm install && nodemon"
    volumes:
      - app02/src:/var/www
    working_dir: /var/www
    ports:
      - "3000"
    networks:
      - backend

networks:
  backend:
    driver: bridge

提前谢谢。

2 个答案:

答案 0 :(得分:0)

将目录名称添加到context:volumes:路径似乎可以解决此问题:

version: '2'

services:

  api01:
    build:
      context: ../app01
    container_name: api01
    command:
      bash -c "npm install && nodemon"
    volumes:
      - ../app01/src:/var/www
    working_dir: /var/www
    ports:
      - "3000"
networks:
  - backend

答案 1 :(得分:0)

我建议采用略有不同的方法。我使用了一个元库 - 基本上是一个包含其他存储库的外部存储库。

以下是几个实现: https://github.com/mateodelnorte/meta http://gitslave.sourceforge.net/

您可以拥有多个元存储库,其中包含子存储库的不同子集。如果它们重叠就没问题。在这个meta repo里面是放置docker-compose文件的理想场所。

您的开发人员的工作流程如下:

meta git clone git@github.com:yourOrg/project-name.git
cd project-name
docker-compose up

你的docker-compose.yml文件看起来像这样:

version: "2"

networks:
  service:
  site:

services:

  rabbitmq:
    image: rabbitmq
    hostname: rabbitmq
    networks:
      - service

  redis:
    image: redis
    networks:
      - service

  mongo:
    image: mongo
    networks:
      - site

  site:
    build: ./nycnode-site
    ports:
     - "3000:3000"
    volumes:
     - ./nycnode-site:/home/app/site
     - /home/app/site/node_modules
    environment:
     - MONGO_URI=mongodb://mongo:27017/nycnode
     - NODE_ENV=development
    networks:
      - site

  meetup-ingestor:
    build: ./nycnode-meetup-ingestor
    volumes:
     - ./nycnode-meetup-ingestor:/home/app/meetup-ingestor
     - /home/app/meetup-ingestor/node_modules
    environment:
     - RABBITMQ_URL=amqp://rabbitmq:5672
     - REDIS.HOST=redis
     - NODE_ENV=development
    networks:
      - service

  user-ingestor:
    build: ./nycnode-user-ingestor
    volumes:
     - ./nycnode-user-ingestor:/home/app/user-ingestor
     - /home/app/user-ingestor/node_modules
    environment:
     - RABBITMQ_URL=amqp://rabbitmq:5672
     - REDIS.HOST=redis
     - NODE_ENV=development
    networks:
      - service

  youtube-ingestor:
    build: ./nycnode-youtube-ingestor
    volumes:
     - ./nycnode-youtube-ingestor:/home/app/youtube-ingestor
     - /home/app/youtube-ingestor/node_modules
    environment:
     - RABBITMQ_URL=amqp://rabbitmq:5672
     - REDIS.HOST=redis
     - NODE_ENV=development
    networks:
      - service

  denormalizer:
    build: ./nycnode-denormalizer
    volumes:
     - ./nycnode-denormalizer:/home/app/denormalizer
     - /home/app/denormalizer/node_modules
    ports:
     - "3001:3001"
    environment:
     - RABBITMQ_URL=amqp://rabbitmq:5672
     - REDIS.HOST=redis
     - MONGO_URL=mongodb://mongo:27017/nycnode
     - NODE_ENV=development
    networks:
      - service
      - site

此外,没有什么能阻止你拥有多个docker-compose.yml文件。

您可以使用-f标记

指定您要使用哪一个
docker-compose -f docker-compose-subset-A.yml up