并行Docker上下文是否可行?

并行Docker上下文是否可行?,docker,docker-compose,dockerfile,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 / a

我们如何使用不是当前目录子目录的项目和路径来引入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

提前谢谢。

看起来像是将目录名添加到
上下文:
卷:
路径将解决以下问题:

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

将目录名添加到
上下文:
卷:
路径将解决此问题:

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

我建议采取稍微不同的方法。我使用元存储库—基本上是包含其他存储库的外部存储库

以下是几个实现:

您可以有多个元存储库,其中包含子repo的不同子集。如果它们重叠就可以了。在meta repo的内部将是放置docker撰写文件的完美场所

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

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

我建议采取稍微不同的方法。我使用元存储库—基本上是包含其他存储库的外部存储库

以下是几个实现:

您可以有多个元存储库,其中包含子repo的不同子集。如果它们重叠就可以了。在meta repo的内部将是放置docker撰写文件的完美场所

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

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