Подключение из приложения в Docker
Подключение из приложения
открывает базу по адресу
сервиса и читает документ.
Клиент MongoClient
из пакета mongodb
идёт на mongodb://db:27017,
базу app
и коллекцию notes.
Слово hello
попадает в ответ HTTP
на порту 3000
без стороннего фреймворка.
Скрипт подключается,
кладёт или читает документ
и слушает 0.0.0.0:
const http = require('node:http');
const { MongoClient } = require('mongodb');
const url = 'mongodb://db:27017';
async function main() {
const client = new MongoClient(url);
await client.connect();
const notes = client.db('app').collection('notes');
await notes.updateOne(
{ text: 'hello' },
{ $set: { text: 'hello' } },
{ upsert: true }
);
const doc = await notes.findOne({ text: 'hello' });
const word = doc.text;
http.createServer((req, res) => {
res.end(word);
}).listen(3000, '0.0.0.0');
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
Зависимость и образ
собираются как в уроке
про драйвер.
Файл package.json
содержит mongodb,
а Dockerfile
выполняет npm install
при сборке.
Сервис db
без пароля.
Сервис web
собирается из точки,
стартует после db
по порядку запуска
и публикует порт
3000:
services:
db:
image: mongo:8.3
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
Правило depends_on
задаёт лишь очередь
создания контейнеров.
Если сервер ещё не готов,
страницу обновляют,
пока ответ не появится.
Пересборка и подъём:
docker compose up -d --build
Адрес localhost:3000
в браузере покажет
слово hello.
Опишите сервис db без пароля и сервис site с образом приложения, портом 3000 и зависимостью от db по порядку старта.
Откройте localhost:3000 и зафиксируйте текст ответа после подключения к коллекции notes.