РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗dcNdMyQr 38 of 39 menu
◀ ▶

Запрос из приложения в Docker

Запрос из приложения читает строку из базы и отдаёт её на странице. Пакет mysql2 идёт на хост db, базу app и таблицу notes под пользователем app. Слово hello попадает в ответ HTTP на порту 3000 без стороннего фреймворка.

Скрипт открывает соединение, читает поле из строки и слушает 0.0.0.0:

const http = require('node:http'); const mysql = require('mysql2/promise'); async function main() { const conn = await mysql.createConnection({ host: 'db', user: 'app', password: 'demo', database: 'app', }); const [rows] = await conn.execute( 'SELECT body FROM notes LIMIT 1' ); const word = rows[0].body; http.createServer((req, res) => { res.end(word); }).listen(3000, '0.0.0.0'); } main().catch((err) => { console.error(err); process.exit(1); });

Зависимость и образ собираются как в уроке про драйвер. Файл package.json содержит mysql2, а Dockerfile выполняет npm install при сборке.

Сервис db с базой app и пользователем app. Сервис web собирается из точки, стартует после db по порядку запуска и публикует порт 3000:

services: db: image: mysql:9.7 environment: MYSQL_ROOT_PASSWORD: demo MYSQL_DATABASE: app MYSQL_USER: app MYSQL_PASSWORD: demo web: build: . ports: - "3000:3000" depends_on: - db

Таблицу notes со словом hello создают отдельной командой после подъёма:

docker compose up -d --build

Заполнение таблицы внутри сервиса базы:

docker compose exec db mysql -uapp -pdemo app -e "CREATE TABLE IF NOT EXISTS notes (id INT PRIMARY KEY AUTO_INCREMENT, body VARCHAR(255)); INSERT INTO notes (body) VALUES ('hello');"

Правило depends_on задаёт лишь очередь создания контейнеров. Если сервер ещё не готов, страницу обновляют, пока ответ не появится. Адрес localhost:3000 в браузере покажет слово hello.

Опишите сервис db с пользователем app и сервис site с образом приложения, портом 3000 и зависимостью от db по порядку старта.

Откройте localhost:3000 и зафиксируйте текст ответа после чтения из таблицы notes.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить