Установить несколько одинаковых контейнеров в одной системе виртуализации достаточно просто. Единственная задача которую надо решить это определить для каждого контейнера свой TCP порт в родительской операционной системе. Ниже приведен пример с созданием 2-х контейнеров мессенджера RocketChat и соответственно 2-х контейнеров базы данных Mongodb.
# Запуск контейнера 1 Mongodb
docker run \
# установить имя контейнера
--name dbstart \
# определить порты 27018 - порт в родительской ОС (можно установить любой), 27017 - порт внутри контейнера (всегда 27017, не менять)
-p 27018:27017 \
# установить директорию для файлов баз данных в родительской ОС, вне контейнера Mongodb, полезно для организации резервного копирования
--mount type=bind,source=/var/mongodb/dbstart,target=/data/db \
# имя образа контейнера для запуска
-d mongo:4.0 \
# имя реплики базы данных
--replSet rs01
# Запуск контейнера 1 RocketChat
docker run \
# установить имя контейнера
--name rocketchatstart \
# определить порты 3001 - порт в родительской ОС (можно установить любой), 3000 - порт внутри контейнера (всегда 3000, не менять)
-p 3007:3000 \
# имя связанного контейнера, в данном случае имя контейнера базы данных mongodb
--link dbstart \
# установить 3 переменные окружения
# полная ссылка на сайт, должна соответствовать настройкам web-сервера родительской машины
--env ROOT_URL=https://chat.example.test \
# две ссылки на контейнер mongodb, где
# dbstart - имя контенера
# 27017 - фиксированное имя порта внутри контейнера mongodb (всегда 27017, не менять)
# local - фиксированное имя базы данных внутри контейнера mongodb (всегда local, не менять)
# meteor - произвольное имя базы данных внутри контейнера mongodb, где rocketchat будет сохранять все коллекции
# rs01 - имя реплики, установленное в контейнере mongodb
--env MONGO_OPLOG_URL=mongodb://dbstart:27017/local?replicaSet=rs01 \
--env MONGO_URL=mongodb://dbstart:27017/start?replicaSet=rs01 \
# установить директорию для хранения загружаемых файлов в родительской ОС, вне контейнера RocketChat (необходимо отдельно установить соответствующий параметр в admin меню rocketchat)
--mount type=bind,source=/var/rocketchatfiles/start,target=/mnt \
# имя образа контейнера для запуска
-d rocket.chat
# Запуск контейнера 2 Mongodb
docker run \
--name dbclient1 \
-p 27019:27017 \
--mount type=bind,source=/var/mongodb/dbclient1,target=/data/db \
-d mongo:4.0 \
--replSet rs02
# Запуск контейнера 2 RocketChat
docker run \
--name client1 \
-p 3005:3000 \
--link dbclient1 \
--env ROOT_URL=https://client1.example.test \
--env MONGO_OPLOG_URL=mongodb://dbclient1:27017/local?replicaSet=rs02 \
--env MONGO_URL=mongodb://dbclient1:27017/client?replicaSet=rs02 \
--mount type=bind,source=/var/rocketchatfiles/client1,target=/mnt \
-d rocket.chat
В результате вы увидите 4 работающих контейнера
