Я рекомендую использовать docker-compose для целей, которые вы описали выше.
С помощью docker-compose вы можете обращаться к базе данных через имя службы вместо IP (который потенциально недоступен в другой системе). Здесь две ссылки, чтобы начать
Обновленный ответ (10.11. 2019)
Вот конкретный пример для вашего приложения asp.net:
docker-compose.yaml
version: "3"
services:
frontend:
image: fqdn/aspnet:tag
ports:
- 8080:80
links:
- database
database:
image: mongo
environment:
MONGO_INITDB_DATABASE: "mydatabase"
MONGO_INITDB_ROOT_USERNAME: "root"
MONGO_INITDB_ROOT_PASSWORD: "example"
volumes:
- myMongoVolume:/data/db
volumes:
myMongoVolume: {}
ИзКонтейнер внешнего интерфейса, вы можете получить доступ к контейнеру mongo через имя службы «база данных» (вместо IP). Из-за определения ссылки в веб-службе, веб-служба запускается после связанной службы (базы данных).
Благодаря определению тома база данных mongo будет храниться в томе, который сохраняется независимо от жизненного цикла контейнера.
Кроме того, я предполагаю, что вы хотите обратиться к приложению asp.net через IP-адрес хоста. Я не знаю порт, который вы предоставляете в своем приложении, поэтому я предполагаю порт 80 по умолчанию. Через раздел портов в веб-интерфейсе мы определяем, что порт 80 контейнера отображается как порт 8080 на IP-адресе хоста. Например, вы можете открыть свой браузер и ввести свой IP-адрес хоста и порт 8080, например, 127.0.0.1:8080 для localhost и обратиться к своему приложению.
С установленным docker-compose вы можете запустить свое приложение, которое состоит из вашего интерфейса и службы базы данных, с помощью
docker-compose up
Доступные опции команды для docker-compose
можно найти здесь
Инструкции по установке для docker-compose
Обновленный ответ (10.11.2019, v2)
Из раздела комментариев
Имейте в виду, что вам нужно подключиться через имя_службы (например, база данных)и правильный порт. Для MongoDB этот порт - 27017. Это будет связано с базой данных: 27017 в вашей конфигурации внешнего интерфейса
Q: в этом случае монго также будет доступно извне?
A: Нет, поскольку служба не содержит определения портов, сама база данных не будет доступна напрямую. С точки зрения безопасности это предпочтительнее.
В: вы могли бы объяснить это
volumes:
myMongoVolume: {}
A: в определении сервиса для вашегослужба базы данных, мы указали том для хранения самой базы данных, чтобы сделать данные независимыми от жизненного цикла контейнера. Однако, просто определив том в разделе службы, он не будет создан. Посредством определения в разделе громкости мы создаем том myMongoVolume
с настройками по умолчанию (указывается через {}
). Если вы хотите настроить свой том, вы можете сделать это в разделе томов вашего docker-compose.yaml. Дополнительную информацию о томах можно найти здесь
, например, если вы хотите использовать определенный драйвер хранилища для своего тома или использовать внешнее хранилище.