docker-compose.yaml для запуска YugabyteDB с POSTGRES_USER POSTGRES_PASSWORD POSTGRES_DB env

Образ Docker, предоставленный компанией Yugabyte для YugabyteDB, не создает и не запускает базу данных, поскольку ее можно использовать для разных целей: запустить один yb-master или yb-tserver, или оба с помощью yugabyted. Рабочая база данных состоит из нескольких узлов. Однако для разработки или автоматизированного тестирования достаточно запустить один контейнер с определенной базой данных, пользователем и паролем.

YugabyteDB совместима с PostgreSQL, что означает, что вы можете заменить PostgreSQL на YugabyteDB без изменения приложения. Образ PostgreSQL позволяет создать базу данных и задать пользователя и пароль с помощью следующих переменных окружения: POSTGRES_USER POSTGRES_PASSWORD POSTGRES_DB, и вы, вероятно, хотите того же для YugabyteDB. И, почему бы и нет, с теми же переменными окружения.

Вот пример, основанный на тестовом наборе knex.js https://github.com/knex/knex/blob/master/scripts/docker-compose.yml.

Этот docker-compose.yml запускает PostgreSQL с базой данных с именем knex_test и пользователем/паролем testuser/knextest и запускает другой контейнер для проверки, когда это соединение доступно.

Вот как я добавляю YugabyteDB таким же образом:

version: '3'
services:

  yugabytedb:
    image: docker.io/yugabytedb/yugabyte:latest
    command: |
     bash -c "
     # create database and user as soon as database is up
     until [ -z "POSTGRES_USER" ] || PGPASSWORD=yugabyte bin/ysqlsh -v ON_ERROR_STOP=1 \
      -c "create database $${POSTGRES_DB:-$${POSTGRES_USER}} " \
      -c "create user $${POSTGRES_USER} password '$${POSTGRES_PASSWORD}' " \
      2>/dev/null
      do
       echo "Waiting for YugabyteDB to be up for creating user $${POSTGRES_USER}." ; sleep 5
      done &
     # start YugabyteDB
     bin/yugabyted start --daemon=false --tserver_flags='ysql_enable_auth=true'
     "
    environment:
      - POSTGRES_USER=testuser
      - POSTGRES_PASSWORD=knextest
      - POSTGRES_DB=knex_test
    ports:
      - 25433:5433
      - 27000:7000

  waityugabyte:
    image: postgres:13-alpine
    links:
      - yugabytedb
    depends_on:
      - yugabytedb
    entrypoint:
      - bash
      - -c
      - 'until PGPASSWORD=knextest /usr/local/bin/psql postgres://testuser@yugabytedb:5433/knex_test -c "SELECT 1"; do sleep 5; done'

Войти в полноэкранный режим Выйти из полноэкранного режима

База данных YugabyteDB запускается командой bin/yugabyted start --daemon=false --tserver_flags='ysql_enable_auth=true' и фоновый цикл пытается подключиться для создания базы данных и пользователя в соответствии с переменными окружения.

Порт по умолчанию для YugabyteBD – 5433, что позволяет запускать его вместе с PostgreSQL на его порту по умолчанию. Порт 7000 – это графическая консоль.

Если вам нужен более сложный docker-compose.yaml с полным контролем над топологией кластера yb-master/yb-tserver, вот как я создаю его для своих лабораторий: https://github.com/FranckPachot/ybdemo/tree/main/docker/yb-lab.

Обновление от июня 2022 года

Следующая команда, вероятно, лучше, используя --initial_scripts_dir:

    command: |
     bash -c '
     mkdir -p /var/ybinit
     echo "create database $${POSTGRES_DB:-$${POSTGRES_USER}}             " > /var/ybinit/01-db.sql
     echo "create user $${POSTGRES_USER} password '$${POSTGRES_PASSWORD}' " > /var/ybinit/02-usr.sql
     # start YugabyteDB
     bin/yugabyted start --daemon=false --initial_scripts_dir=/var/ybinit --tserver_flags=ysql_enable_auth=true
     '
Войти в полноэкранный режим Выйти из полноэкранного режима

и еще один пример с докер-композитом Nakama, если waityugabyte для вас не работает: https://dev.to/yugabyte/nakama-with-yugabytedb-1i5o

Оцените статью
Procodings.ru
Добавить комментарий