3

Я хочу настроить небольшой веб-сервер с несколькими веб-приложениями, такими как OpenProject и GitLab, а также OpenLDAP для управления пользователями. Чтобы инкапсулировать отдельные приложения, следует применять докер.

Теперь я прочитал о нескольких возможностях того, как позволить приложениям общаться друг с другом, используя их имена хостов (например, веб-приложение для slapd). Большинство решений используют DNS-серверы, работающие на хосте докера, как здесь, или в отдельном контейнере докера.

Однако, читая руководство пользователя докера, я также обнаружил, что настраиваемые сети докеров также разрешают разрешение имен между контейнерами в сети.

Естественно, я бы предпочел второй подход с использованием докерских сетей, поскольку он требует меньше инструментов и, следовательно, конфигурации. Однако я немного запутался в том, чем отличаются сети докеров и настраиваемые DNS-серверы. Есть ли какие-то детали, которые я пропускаю?


Добавлено небольшое уточнение в последнем абзаце.

1 ответ1

1

Я сейчас занимаюсь чем-то похожим. Я использую функцию привязки Docker. Связав два контейнера вместе, вы можете установить DN, под которым связан связанный контейнер. Я лично использую docker-compose для лучшей конфигурации, чем просто простые команды. Вы даже можете настроить сети и предоставить контейнерам доступ к этому. Но каждый доступ происходит через DN, созданные докером, поскольку IP-адреса контейнера могут измениться при перезапуске.

В качестве примера, как я использую его для owncloud и nginx как прокси-сервер разгрузки ssl.

version: '2'
services:
  nginx:
    container_name: nginx_proxy
    image: nginx
    links:
      - owncloud:owncloud
    networks:
      - owncloud_web
    ports:
      - 80:80
      - 443:443
    volumes:
      - ...

owncloud:
  container_name: owncloud
  links:
    - owncloud_db:postgresql
  networks:
    - gitlab_web
  volumes:
    - ...

owncloud_db:
  container_name: owncloud_db
  image: postgres:9.4
  networks:
    - owncloud_db
  volumes:
    - ...

networks:
  owncloud_web:
  owncloud_db:

При этом nginx может получить доступ к owncloud через owncloud, а owncloud может получить доступ к своей базе данных в postgresql. Я настроил отдельные сети, чтобы nginx не мог получить доступ к базе данных напрямую.

При использовании внешнего DNS-сервера необходимо знать ip-адреса контейнеров, которые могут измениться при любом перезапуске. Даже полная подсеть может измениться. Так что либо вы должны внедрить динамическую систему DNS, либо надеяться, что IP не изменится.

При использовании внутренних компонентов докера вам не нужно запускать какие-либо дополнительные службы и не нужно полагаться на IP-адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .