Практическое обучение | Docker Compose Quick Start Postgres

Docker PostgreSQL
Практическое обучение | Docker Compose Quick Start Postgres

Это 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, спасибо!