Это 6-й день моего участия в ноябрьском испытании обновлений, подробности о событии:Вызов последнего обновления 2021 г.
С помощью технологии контейнеров мы можем легко создать работающую тестовую среду.Сегодня эта статья научит вас, как использовать Docker Compose для быстрого запуска Postgres.
1. Создайте файл Docker Compose
Сначала создайте папку для хранения наших файлов:
mkdir ~/postgres-demo && cd ~/postgres-demo
Затем создайте файл docker-compose.yml:
touch docker-compose.yml
Добавьте в файл следующее:
version: '3'
services:
postgres:
image: postgres:13.1
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
timeout: 45s
interval: 10s
retries: 10
restart: always
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- APP_DB_USER=docker
- APP_DB_PASS=docker
- APP_DB_NAME=docker
volumes:
- ./db:/docker-entrypoint-initdb.d/
ports:
- 5432:5432
-
image
, указывает, какой образ Docker использовать, включая номер версии -
healthcheck
, чтобы убедиться, что Postgres работает до того, как другие зависящие от него службы смогут запуститься. -
restart
, перезапуск всегда гарантирует, что БД запустится при старте системы
Следующие переменные среды используются для назначения имени пользователя и пароля для основной базы данных Postgres:
-
POSTGRES_USER
Пользователь -
POSTGRES_PASSWORD
пароль
init
Сценарий использует следующие переменные среды для создания пользователя базы данных и базы данных для использования приложением:
-
APP_DB_USER
база данных приложений -
APP_DB_PASS
базу данных приложений через -
APP_DB_NAME
Имя базы данных приложения
дляvolume
варианты, будем/docker-entrypoint-initdb.d/
Сопоставьте локальную папку с именем db с папкой в контейнере, куда мы поместим сценарий инициализации базы данных на следующем шаге.
Мы также проходимPostgres
Назначены порту опции портов, порт будет подвергаться нашему серверу, что позволит нам подключиться к базе данных с локальной машины.
Во-вторых, создайте сценарий инициализации базы данных.
Создатьdb
папка для храненияinit
сценарий.
mkdir db
Создать01-init.sh
сценарий.
touch db/01-init.sh
Добавьте следующее:
#!/bin/bash
set -e
export PGPASSWORD=$POSTGRES_PASSWORD;
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER $APP_DB_USER WITH PASSWORD '$APP_DB_PASS';
CREATE DATABASE $APP_DB_NAME;
GRANT ALL PRIVILEGES ON DATABASE $APP_DB_NAME TO $APP_DB_USER;
\connect $APP_DB_NAME $APP_DB_USER
BEGIN;
CREATE TABLE IF NOT EXISTS event (
id CHAR(26) NOT NULL CHECK (CHAR_LENGTH(id) = 26) PRIMARY KEY,
aggregate_id CHAR(26) NOT NULL CHECK (CHAR_LENGTH(aggregate_id) = 26),
event_data JSON NOT NULL,
version INT,
UNIQUE(aggregate_id, version)
);
CREATE INDEX idx_event_aggregate_id ON event (aggregate_id);
COMMIT;
EOSQL
Этот скрипт будет:
- Создайте нового пользователя с именем, присвоенным
app_db_user
, пароль назначенapp_db_pass
- назначен на
APP_db_name
Создайте базу данных с любым именем - Предоставьте все разрешения пользователю в базе данных
- Подключитесь к базе данных и создайте
event
Таблица
3. докер-компоновать
бегать docker compose
начатьPostgres
база данных и запуск базы данныхinit
сценарий.
docker-compose up
Мальчик, ты не можешь видеть достаточно? Нажмите на домашнюю страницу камня, просто нажмите и посмотрите, может быть, будет сюрприз? Добро пожаловать в поддержку点赞 / Подписаться / Комментарий, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!