Dockerizing 2 отдельных зависимых сервисов - PullRequest
0 голосов
/ 20 декабря 2018

В настоящее время у меня есть виртуальная машина с 2 службами.Интерфейсный сервис httpd / apache2, который передает все запросы моим бэкэнд-сервисам.

Моя служба приема заявок прослушивает только 127.0.0.1:7878.Это означает, что он доступен только через localhost.Вот почему я использую интерфейс, чтобы я мог использовать его для прокси моих запросов на 127.0.0.1:7878

Так что моя конфигурация apache2 на виртуальной машине выглядит так:

root@vm:/etc/apache2/sites-enabled# cat backend.conf
<VirtualHost *:443>

    ServerName my.domain.com
    ProxyPass / http://localhost:7878/
    ProxyPassReverse / http://localhost:7878/

    SSLEngine On
    SSLCertificateFile    /etc/apache2/ssl/ssl_cert.crt
    SSLCertificateKeyFile /etc/apache2/ssl/ssl_cert.key

</VirtualHost>

Теперь я хочучтобы докеризовать обе службы и развернуть их с помощью docker-compose

, я настроил свою бэкэнд-службу, например:

version: '3'
services:
  backend:
    build: backend/.
    ports:
     - "7878:7878"

И в моей папке backend/ есть все необходимые файлы для моей бэкэнд-службы, включаяDockerfile.Я могу успешно построить по образу Docker и могу запустить его успешно.Когда я выполняю в модуле, я могу успешно выполнить команды curl в направлении 127.0.0.1:7878/some-end-point

Теперь мне нужно также докернизировать службу внешнего интерфейса.Это может быть apache или даже nginx.Но я не уверен, как оба контейнера будут взаимодействовать друг с другом, учитывая, что мои бэкэнд-сервисы ТОЛЬКО прослушивают 127.0.0.1

Если я расширю свой файл docker-compose, например:

version: '3'
    services:
      backend:
        build: backend/.
        ports:
         - "7878:7878"
      frontend:
        build: frontend/.
        ports:
         - "80:80"
         - "443:443"

Я считаю,он будет раскручивать свою собственную сеть, и мой бэкэнд-сервис не будет доступен, используя 127.0.0.1:7878

Так что в этом случае, какой подход лучше?Как мне использовать docker-compose для раскрутки разных контейнеров в той же сети, чтобы они разделяли 127.0.0.1?

1 Ответ

0 голосов
/ 20 декабря 2018

Вы не можете сделать это, как вы описываете: IPv4-адрес 127.0.0.1 - это магический адрес, который всегда означает «я», а в контексте Docker это будет означать «этот контейнер».

Этодостаточно просто настроить частную внутреннюю сеть Docker для ваших контейнеров ;фактически, Docker Compose сделает это автоматически для вас.Ваш бэкэнд-сервис должен прослушивать 0.0.0.0, чтобы быть доступным из других контейнеров.Вы не обязаны устанавливать публикуемый извне ports: в своем контейнере (или использовать опцию docker run -p).Если вы этого не сделаете, то ваш контейнер будет доступен только из других контейнеров в той же внутренней Docker-сети, используя имя службы в файле docker-compose.yml в качестве имени DNS, на любом порту, в котором происходит процесс внутри контейнера.прослушивание.

Минимальный пример этого может выглядеть следующим образом:

version: '3'
services:
  proxy:
    image: 'my/proxy:20181220.01'
    environment:
      BACKEND_URL: 'http://backend'
      BIND_ADDRESS: '0.0.0.0:80'
    ports:
      - '8080:80'
  backend:
    image: 'my/backend:20181220.01'
    environment:
      BIND_ADDRESS: '0.0.0.0:80'

Из-за пределов Docker вы можете связаться с прокси на http://server-hostname.example.com:8080.Внутри Docker два имени хоста proxy и backend будут преобразованы во внутренние адреса Docker, и мы настроили обе службы (через установку гипотетической переменной среды) для прослушивания на обычном HTTP-порту 80.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...