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

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

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

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

import os import psycopg from http.server import BaseHTTPRequestHandler, HTTPServer def load_word(): conninfo = ( f"host={os.environ['DB_HOST']} " f"port={os.environ['DB_PORT']} " f"dbname={os.environ['DB_NAME']} " f"user={os.environ['DB_USER']} " f"password={os.environ['DB_PASSWORD']}" ) with psycopg.connect(conninfo) as conn: with conn.cursor() as cur: cur.execute("SELECT body FROM notes LIMIT 1") row = cur.fetchone() return row[0] WORD = load_word() class Handler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(WORD.encode()) if __name__ == '__main__': HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()

Зависимость и образ собираются как в уроке про драйвер. Файл requirements.txt содержит psycopg[binary], а Dockerfile выполняет pip install с флагом -r при сборке.

psycopg[binary]

Шаги образа такие:

FROM python:3.14 WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY app.py . CMD ["python", "app.py"]

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

services: db: image: postgres:18 environment: POSTGRES_PASSWORD: demo POSTGRES_DB: db POSTGRES_USER: app app: build: . ports: - "8080:8000" environment: DB_HOST: db DB_PORT: "5432" DB_NAME: db DB_USER: app DB_PASSWORD: demo depends_on: - db

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

docker compose up -d --build

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

docker compose exec db psql -U app -d db -c "CREATE TABLE IF NOT EXISTS notes (id SERIAL PRIMARY KEY, body TEXT); INSERT INTO notes (body) VALUES ('hello');"

Если сервер ещё не готов, страницу обновляют, пока ответ не появится. Откроем адрес localhost:8080 в браузере и увидим слово hello.

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

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

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