Я хотел бы знать, как мы связываем веб-приложение с базой данных в режиме Docker Swarm. Я очень плохо знаком с режимом docker swarm и имею базовую настройку кластера на моей локальной машине. Любые ссылки будут великолепны.
Пример: размещение приложения drupal (связанные контейнеры drupal cms с контейнером базы данных mysql).
Спасибо
Правильно, использование пользовательских сетей — это путь вперед. Очень простой пример, чтобы вы начали;
Создать «оверлейную» сеть (оверлейные сети позволяют контейнерам обмениваться данными, даже если они работают на разных узлах в рое);
docker network create --driver=overlay my-network
Создать службу базы данных с именем my-db
и прикрепить его к my-network
сеть. Нет необходимости «публиковать» порт базы данных, потому что drupal свяжется с базой данных через my-network
сеть. Публикуйте порты базы данных только в том случае, если вы хотите, чтобы база данных была общедоступной.
docker service create \
--name=my-db \
-e MYSQL_ROOT_PASSWORD=topsecret \
-e MYSQL_DATABASE=drupal\
-e MYSQL_USER=drupal-user \
-e MYSQL_PASSWORD=secret \
--network=my-network \
mysql:5.7
Создать сервис друпал (по имени mysite
), а также подключите его к той же сети. Опубликуйте порты сайта, потому что вы хотите, чтобы он был общедоступным
docker service create \
--name=mysite \
--network=my-network \
--publish=8080:80 \
drupal:8.2-apache
После того, как сервисы созданы и контейнеры запущены (вы можете проверить статус с помощью docker service ls
), вы можете посетить <host-ip>:8080
в вашем браузере. В режиме роя, <host-ip>
может быть IP-адрес любой хозяин в вашем рое. «Сетка маршрутизации» автоматически направит сетевое соединение на узел, на котором работает контейнер.
Теперь, чтобы настроить drupal, используя имя пользователя / пароль, которые вы установили в MYSQL_USER
а также MYSQL_PASSWORD
и используя my-db
в качестве имени хоста для базы данных (в разделе дополнительных параметров) — при использовании сетей Docker вы можете подключаться к другим службам в той же сети через их имя.
Это просто очень быстрый пример. Некоторые вещи, чтобы посмотреть на это;
docker secrets
, которые позволяют передавать учетные данные базы данных более безопасным способом. Документация еще не опубликована, но вы можете найти их на GitHubиспользование ссылок в докере, по-видимому, более унаследовано, поэтому для подключения к контейнерам (хотя я все еще использую этот метод сам)
«Новый» способ сделать это — использовать докерские сети, вы можете прочитать об этом здесь:
https://docs.docker.com/engine/userguide/networking/get-started-overlay/
Надеюсь это поможет