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