Docker-Compose запускает несколько экземпляров одного образа в разных портах

У меня есть приложение python flask, и я хочу иметь несколько его экземпляров на одном сервере, чтобы каждый контейнер имел собственный выходной порт (или DNS) и зависимости. Я использовал docker-compose, и он хорошо работает. Я видел scale arg, но я думаю, что это хорошо для чего-то вроде балансировки нагрузки, когда нет другой версии приложения. Еще одно решение, которое пришло мне в голову, - иметь несколько сервисов для одного приложения и запускать каждый экземпляр по его имени в терминале.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
8
0
6 896
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Команда docker-compose scale устарела, и в документации предлагается использовать docker-compose up --scale SERVICE=NUM. Но вы должны быть осторожны при указании портов для масштабирования. Если вы попытаетесь поставить свои контейнеры в порт 80 пять раз, четыре из пяти потерпят неудачу - порт уже будет занят. Но выход есть.

Я только что протестировал этот подход, и он сработал. Вот docker-compose.yml, который я тестировал:

version: '3.7'
services:
  test_app:
    image: <my_custom_image>
    ports:
      - 10000-10003:80

Затем я запустил его с docker-compose up --scale test_app=4, и он развернул 4 экземпляра test_app на четырех разных (но указанных заранее) портах: 10000, 10001, 10002 и 10003.

Надеюсь, я ответил на ваш вопрос.

Спасибо! Это действительно полезно. Но что происходит с зависимостями? У меня есть база данных для этого приложения, и я использовал depends_on, чтобы указать это как зависимость. Я хочу, чтобы все контейнеры были изолированы друг от друга.

Peekbyte 27.10.2018 17:07

Не произойдет. Все контейнеры будут в одной сети и, следовательно, будут знать друг о друге. Как правило, по умолчанию все, что вы вставляете в services в docker-compose.yml, будет в одной сети, независимо от масштаба. Вы можете соединить один контейнер с другим по имени, которое вы видите при перечислении контейнеров с docker ps.

Alex Karshin 27.10.2018 17:12

Другие вопросы по теме