2 RocketChat и 1 Docker

Установить несколько одинаковых контейнеров в одной системе виртуализации достаточно просто. Единственная задача которую надо решить это определить для каждого контейнера свой 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 работающих контейнера