У меня есть приложение python flask, и я хочу иметь несколько его экземпляров на одном сервере, чтобы каждый контейнер имел собственный выходной порт (или DNS) и зависимости. Я использовал docker-compose, и он хорошо работает.
Я видел scale
arg, но я думаю, что это хорошо для чего-то вроде балансировки нагрузки, когда нет другой версии приложения. Еще одно решение, которое пришло мне в голову, - иметь несколько сервисов для одного приложения и запускать каждый экземпляр по его имени в терминале.
Команда 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
.
Надеюсь, я ответил на ваш вопрос.
Не произойдет. Все контейнеры будут в одной сети и, следовательно, будут знать друг о друге. Как правило, по умолчанию все, что вы вставляете в services
в docker-compose.yml
, будет в одной сети, независимо от масштаба. Вы можете соединить один контейнер с другим по имени, которое вы видите при перечислении контейнеров с docker ps
.
Спасибо! Это действительно полезно. Но что происходит с зависимостями? У меня есть база данных для этого приложения, и я использовал
depends_on
, чтобы указать это как зависимость. Я хочу, чтобы все контейнеры были изолированы друг от друга.