У меня есть несколько серверов. У каждого из них есть много проектов для создания докеров для HTTPS. Проекты, которые используют один обратный прокси-сервер с автоматическим обнаружением для HTTPS.
Несколько дней назад я обнаружил на YouTube, что этот рой полностью прост в настройке и дал мне много возможности перемещать контейнеры между этими машинами без значительного простоя.
Я создал конфигурацию:
version: '3.2' services: nginx: image: myFancyImage networks: - web restart: always deploy: mode: global ports: - target: 80 published: 81 # for testing protocol: tcp mode: ingress - target: 443 published: 444 # for testing protocol: tcp mode: ingress volumes: - mainnginx-www:/var/www - mainnginx-letsencrypt:/etc/letsencrypt - mainnginx-sites-enabled:/etc/nginx/sites-enabled/ volumes: mainnginx-www: mainnginx-letsencrypt: mainnginx-sites-enabled: networks: web: external: name: web1
И развернул службу через:
docker stack deploy --compose-file docker-compose.yml mainnginx
Теперь на обеих машинах экземпляр моего обратного прокси-сервера запустил и смонтировал три тома, но они только локальные, а не общие.
Конечно, я могу использовать NFS для их синхронизации, но что здесь лучше всего? NFS выглядит нечистым. Я где-то читал, что докер монтируется из менеджера, но это не то, что происходит ...
Как вы это решили?
, я создал сеть для своего mainproxy:
docker network create --opt encrypted --attachable --driver overlay web1
и добавил один из моих локальных проектов из server1 в сеть, как показано в презентации.
Затем я попытался подключиться с моего обратного прокси server1 и с моего обратного прокси server2, чтобы проверить связь с контейнером моих проектов, и смог сделать это только с server1. Server2 обнаружил правильный IP-адрес, но не выполнил ни ping, ни pong. Он просто ждал.
Что я сделал не так? Разве это не идея?
Связано с вашей первой проблемой. Хотя Swarm действительно прост в настройке и позволяет создавать реплики ваших контейнеров и многое другое, разделение объема не входит в комплект поставки Swarm. Вы правы, в диспетчере тома не монтируются. Каждый контейнер будет монтировать том на каждом рабочем хосте, на котором он работает, и эти тома не используются совместно в Swarm.
Вам следует ознакомиться с документацией Docker о подключаемых модулях томов. Из документации, «плагин тома может позволить томам Docker сохраняться на нескольких хостах Docker». Поэтому, если в вашем случае вы хотите использовать одни и те же тома между хостами роя, вам придется выбрать плагин тома, который лучше всего подходит для вашей среды, выбрав плагин из списка .
Альтернативой плагинам томов, как вы упомянули, может быть, конечно, совместное использование данных с NFS, GlusterFS или Ceph, где рабочие узлы в Swarm должны совместно использовать точку монтирования тома. Я бы порекомендовал вам прочитать эту статью о постоянстве томов и совместном использовании томов, хотя она датирована и не имеет прямого отношения к swarm, она содержит ценную информацию и рассказывает о двух упомянутых стратегиях: плагин тома и совместное использование данных. Обратите внимание, что в статье упоминается Flocker, но Flocker был прекращен, хотя он был разветвлен здесь https://github.com/ScatterHQ/flocker ). Поскольку ServerFault не основан на мнениях, я не включаю свои предпочтения, я просто упоминаю существующие стратегии решения вашей проблемы.
О вашей второй проблеме. Swarm действительно позволяет связывать контейнеры, расположенные на разных рабочих хостах, благодаря наложенной сети. Я использую балансировщики нагрузки и обратный прокси, которые безупречно соединяются с другими контейнерами. Вы создаете сеть в одном из ваших менеджеров Swarm, и ваши рабочие хосты будут изменены, поэтому будет создана такая же сеть и будут применяться правила брандмауэра. Если у вас возникли проблемы, я рекомендую вам следовать руководству Swarm , чтобы вы могли увидеть, как он работает, или обнаружить проблему в вашей установке. Я использую его для устранения неполадок.