2016-10-05 4 views
1

Я использую docker 1.12.1 У меня есть простой скрипт для написания докеров.Используйте докер-сочинение с докером-роем

version: '2' 

services: 
    jenkins-slave: 
    build: ./slave 
    image: jenkins-slave:1.0 
    restart: always 
    ports: 
    - "22" 
    environment: 
    - "constraint:NODE==master1" 
    jenkins-master: 
    image: jenkins:2.7.1 
    container_name: jenkins-master 
    restart: always 
    ports: 
    - "8080:8080" 
    - "50000" 
    environment: 
    - "constraint:NODE==node1" 

я запускаю этот скрипт с docker-compose -p jenkins up -d. Это создает мои 2 контейнера, но только на моем хозяине (откуда я выполняю свою команду). Я бы ожидал, что он будет создан на главном и один на узле. Я также попытался добавить

networks: 
    jenkins_swarm: 
    driver: overlay 

и

networks: 
    - jenkins_swarm 

После каждой службы, но это не удается с:

Cannot create container for service jenkins-master: network jenkins_jenkins_swarm not found 

Хотя сеть создается, когда я выполняю docker network ls

Тот, кто может помочь мне развернуть 2 контейнера на моих 2 узлах h docker-compose. Рой безупречно работает над моим «кластером». Я выполнил this учебник для проверки.

ответ

2

Compose не поддерживает режим Swarm в данный момент.

При запуске docker compose up на главном узле, Compose вопросы docker run команды для служб в Compose файле, а не docker service create - именно поэтому контейнеры все работают на хозяина. См. this answer для параметров.

Во второй точке сети охвачены 1.12. Если вы проверите свою сеть, вы обнаружите, что она была создана на уровне роя, но Compose запускает контейнеры на уровне двигателя, которые не могут видеть сеть роя.

+0

Я пришел сюда с тем же вопросом. Документация для Compose говорит, что она * поддерживает * Swarm. Тем не менее, существует либо огромный фрагмент документации (например, как вы определяете реплики?), Либо неверно? https://docs.docker.com/compose/swarm/ – Joe

0
  • Мы можем сделать это с помощью docker compose v3 now.

    https://docs.docker.com/engine/swarm/#feature-highlights https://docs.docker.com/compose/compose-file/

  • Вы должны инициализировать кластер роя, используя команду

    $ docker swarm init

  • Вы можете добавить больше узлов в качестве работника или менеджера -

    https://docs.docker.com/engine/swarm/join-nodes/

  • После того, как вы добавили оба узла в кластер, передайте файл компоновки v3 i.e для создания стека. Файл Compose должен содержать только предопределенные изображения, вы не можете предоставить Dockerfile для развертывания в режиме Swarm.

    $ docker stack deploy -c dev-compose-deploy.yml --with-registry-auth PL

  • Просмотр статуса стека услуг -

$ docker stack services PL

  • Попробуйте использовать метки & ограничения Placement поставить услуги на разных узлах.

Пример файла "Dev-Compose-deploy.yml" для справки

version: "3" 

services: 

    nginx: 
    image: nexus.example.com/pl/nginx-dev:latest 
    extra_hosts: 
     - "dev-pldocker-01:10.2.0.42” 
     - "int-pldocker-01:10.2.100.62” 
     - "prd-plwebassets-01:10.2.0.62” 
    ports: 
     - "80:8003" 
     - "443:443" 
    volumes: 
     - logs:/app/out/ 
    networks: 
     - pl 
    deploy: 
     replicas: 3 
     labels: 
     feature.description: “Frontend” 
     update_config: 
     parallelism: 1 
     delay: 10s 
     restart_policy: 
     condition: any 
     placement: 
     constraints: [node.role == worker] 
    command: "/usr/sbin/nginx" 

    viz: 
    image: dockersamples/visualizer 
    ports: 
     - "8085:8080" 
    networks: 
     - pl 
    volumes: 
     - /var/run/docker.sock:/var/run/docker.sock:ro 
    deploy: 
     replicas: 1 
     labels: 
     feature.description: "Visualizer" 
     restart_policy: 
     condition: any 
     placement: 
     constraints: [node.role == manager] 

networks: 
pl: 

volumes: 
logs: