2017-01-12 3 views
1

Как мы можем использовать докеры и создавать контейнеры, используя проекты и пути, которые не ребенок текущего каталога?Возможны ли параллельные контексты Докера?

Пример:

/ 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 

Каждый путь Стараюсь вызывает ошибку. Большинство ошибок жалуются на контекст.

Наша компания портирует примерно 50 веб-сервисов от .NET до микросервисов, используя Express. Однако не все наши интерфейсные и потребляющие приложения требуют доступа ко всем бэкэнд-услугам. Мы также хотим ограничить доступ только к тем проектам и репозиториям, к которым им нужен доступ.

Цель состоит в том, чтобы позволить пользователю проверить службы 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 

Спасибо, заранее.

ответ

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 
0

Я хотел бы предложить несколько иной подход. Я использую metarepository - в основном внешний репозиторий, содержащий другие репозитории.

Вот несколько реализаций: https://github.com/mateodelnorte/meta http://gitslave.sourceforge.net/

Вы можете иметь несколько мета-репозиториев, которые содержат различные подмножества дочерних хранилищу. Все нормально, если они перекрываются. Внутри этого мета-репо было бы идеальным местом для размещения ваших файлов, содержащих докеры.

рабочие процессы вашего застройщика будет следующим:

meta git clone [email protected]:yourOrg/project-name.git 
cd project-name 
docker-compose up 

Где ваш докер-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 

Кроме того, есть ничто не мешает вам от того, несколько докер -compose.yml-файлы.

Вы можете указать, какие из них вы хотели бы использовать с -f флагом

docker-compose -f docker-compose-subset-A.yml up 
Смежные вопросы