2016-11-22 7 views
9

У меня есть файл, содержащий докеры, который развертывает 8 разных докеров в одном хосте. Можно ли развернуть его на разных хостах? Я хотел бы развернуть некоторую услугу на одном хосте, а другой - на другом хосте удаленно. Должен ли я использовать докер-рой? или это более простой способ сделать?Docker-compose: развертывание службы на нескольких хостах

Я читал, что это можно сделать с помощью DOCKER_HOST, но если я настрою/etc/default/docker с этой переменной, все службы будут запущены на удаленном хосте, и мне нужны некоторые службы в одном удаленном хост и другие службы на другом удаленном хосте.

ответ

4

Для развертывания одного докера-compose.yml для нескольких хостов вам необходимо использовать автономный рой (не новый режим роя, но это быстро меняется). Разверните диспетчер роя, который имеет каждый хост, определяемый как члены его роя, а затем вы можете использовать ограничения внутри вашего docker-compose.yml, чтобы определить, какие службы запускаются на каких хостах.

Вы также можете разбить файл docker-compose.yml на несколько файлов, по одному для каждого хоста, а затем запустить несколько команд для добавления докеров, с другим значением DOCKER_HOST, определенным для каждого.

В обоих случаях вам необходимо настроить установки докеров для прослушивания в сети, что должно быть выполнено путем настройки TLS в этих сокетах. This documentation описывает, что вам нужно сделать для этого.

1

Вы можете использовать docker compose version 3, который обеспечивает возможность развертывания нескольких хостов без использования нескольких файлов компоновки. Все, что вам нужно, - определить метки для каждого узла в кластере и использовать имя метки для ограничения placement.

+0

Но это нужно, чтобы создать Swarm кластер Или как я могу определить различные хосты этикетку с известным между них студентами –

+0

Чтобы использовать функцию размещения вам нужно будет использовать Swarm? , – coolsvap

1
  • Мы можем сделать это с помощью 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: 
Смежные вопросы