Skip to content
This repository has been archived by the owner on Mar 24, 2024. It is now read-only.

Latest commit

 

History

History

db-for-testers

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Теги: Docker PostgreSQL

DB for Testers

Задача

Наши тестировщики прониклись идеями контейнеризации и активно начинают использовать Docker в своих тестах (ручных, автоматизированных и т.д.)

Им очень нравится идея, что они могут просто взять контейнер PostgreSQL, закинуть туда БД и запускать тестируемые приложения с нужными данными

Но вот проблема, они работают следующим образом:

  1. Поднимают чистый контейнер
  2. Инициализируют его данными (закидывая в docker-entrypoint-initdb.d конечно же)
  3. Запускают серию тестов

После этого им снова нужен чистый контейнер с теми же данными (т.е. приходится повторять шаги 1-2)

Иногда эти шаги достаточно длительные — см. пример в docker-entrypoint-initdb.d

Поэтому они очень просят сделать им образ уже сразу с инициализированным PostgreSQL, где в базе уже будут готовые данные (мы, конечно, понимаем, что это можно сделать и через docker commit, но давайте попробуем обойтись docker build, раз уж наш Навыкум про сборку контейнеров)

Название базы и её владельца (и пароль, конечно же) нужно передавать через аргументы при сборке образа

Спойлеры

Для решения этой задачи настоятельно рекомендуем ознакомиться с docker-library/postgres#496

Что нужно сделать

Соберите образ с инициализированной БД, используя данные из docker-entrypoint-initdb.d (для этого, конечно же, нужно написать Dockerfile)

За основу возьмите образ 15.4-alpine3.18

При сборке через аргументы передавайте следующие данные:

  1. Имя БД — db (ARG DBNAME)
  2. Имя пользователя — app (ARG DBUSER)
  3. Пароль пользователя — pass (ARG DBPASS)

Никаких доп.настроек не нужно

В собранном образе должен запускаться PostgreSQL на порту 5432 с инициализированной базой

Реализация

В качестве реализации CI/CD пайплайна и Docker Registry можно использовать любые, например (из облачных и бесплатных), GitHub Actions и GitHub Packages