Создание нескольких конвейеров для создания докеров с уникальными IP-адресами - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь скопировать docker-compose конвейер. Этот конвейер организует группу контейнеров и, наконец, сопоставляет port 80 в одном из контейнеров с port 8000 на хосте для внешней связи.

Как я могу создать несколько экземпляров одного и того же конвейера составления докера, чтобы каждый экземпляр получал свой собственный IP-адрес, который я могу использовать на каком-то другом компьютере для доступа к соответствующему экземпляру конвейера через port 8000?

Вот наглядное представление о том, чего я пытаюсь достичь.

eProblem Diagram

Обратите внимание, что оба экземпляра используют один и тот же docker-compose.yml и предоставляют один и тот же порт. Однако различие в том, что им присваиваются уникальные IP-адреса. Могу ли я настроить конвейер docker-compose для запуска только в определенной сети? или всегда создавайте новую сеть перед развертыванием так, чтобы каждый экземпляр получал новый IP-адрес и в силу этого не возникало конфликта порта абстракции.

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

1 Ответ

0 голосов
/ 16 января 2019

Как насчет:

cat <<EOF
version: "3"
  services:
    web1:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
    web2:
      image: python:2.7-alpine
      command: ["python", "-m", "SimpleHTTPServer", "8080"]
EOF

Затем получите виртуальные адреса, например, через:

docker ps | grep compose_ | cut -f1 -d' ' | while read s; do docker inspect $s | egrep "IPAddr.*[0-9]"; done
                "IPAddress": "172.28.0.3",
                "IPAddress": "172.28.0.2",

Затем подтвердите, что оба адреса отвечают на один и тот же порт:

$ curl -sv 172.28.0.2:8080
...
* Connected to 172.28.0.3 (172.28.0.3) port 8080 (#0)
...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
...

$ curl -s 172.28.0.3:8080
...

Вы можете использовать пользовательские сети, чтобы изолировать контейнеры особым образом, но даже с поведением по умолчанию вы можете создать несколько экземпляров этого стека компоновки, и вы всегда будете получать уникальные виртуальные адреса, на которые вы можете выборочно обращаться с вашего клиента. Вы можете поставить обратный прокси-сервер впереди, если хотите направить трафик внешнего клиента в конкретный бэкэнд.

Вы можете иметь несколько экземпляров, переопределив имя проекта для каждого экземпляра с помощью $ COMPOSE_PROJECT_NAME или -p. например:

docker-compose -p mytest1 up -d
docker-compose -p mytest2 up -d

Надеюсь, это поможет.

...