Sign inSign up

flexberry/alt.p8-postgresql

By flexberry

Updated about 6 years ago

Postgres 9.6 images with tds_fdw extention Last release 9.6-1.1.2 - postgres 9.6.15

Image
0

10K+

flexberry/alt.p8-postgresql repository overview

Описание

Образ flexberry/alt.p8-postgresql поддерживает функционал базы данных Postgres.

Характерные особенности образа:

Быстрый старт

Запуск контейнера в режиме docker-compose
  1. Создайте каталог для запуска образа в режиме docker-compose (например testpg)
  2. Скопируйте файл docker-compose-mini.yml в файл docker-compose.yml в созданном каталоге или создайте файл самостоятельно на основе шаблона
version: "3.2"
services:
  postgres:
    image: flexberry/alt.p8-postgresql:latest
    ports:
     - 5432:5432
    volumes:
     - db:/var/lib/pgsql/data/
volumes:
  db:

Если у Вас порт TCP-порт 5432 уже занят другим приложением укажите в mapping'е портов свободный порт. Например 15432:

...
    - 15432:5432
  1. Перейдите созданный каталог (testpg) и запустите команду:
docker-compose up -d

Проверить запуск контейнера можно командой

docker-compose ps

В списке запущенных контейнеров будет контейнер типа:

testpg_postgres_1   /bin/sh -c /docker-cmd.sh   Up      0.0.0.0:5432->5432/tcp

Где testpg - имя каталога запуска контейнера.

База данных контейнера располагается в именованом томе. Проверить наличие именованого тома можно командой:

docker volume ls

В списке томов отобразиться том:

local               testpg_db

Где testpg - имя каталога запуска контейнера.

Работа с контейнером

Сконфигурируйте приложение для работы с базой данных указав:

  • IP-адрес postgres-сервера (127.0.0.1 если приложение запущено на том компьютере);
  • TCP-порт postgres-сервера (по умолчанию 5432);
  • имя пользователя - postgres;
  • пароль - p@ssw0rd

Строка соединения при работе с локальным контейнером:

Server=localhost;Port=5432;User Id=postgres;Password=p@ssw0rd;Database=postgres;
Остановка контейнера

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

docker-compose down 

База данных сохранится в именованом томе (testpg_db) и будет использована при следующем вызове конетейнера.

Конфигурирование сервсиа в docker-compose , запуск образа в виде swarm сервиса

Настройка

Для настройки необходимо:

  • доопределить файл описания сервиса docker-compose.yml;
  • создать файл .env описания параметров настройки сервиса.
Доопределение файл описания сервиса docker-compose.yml

Добавьте в файл docker-compose.yml описания сервиса postgres секции environment и deploy или скопируйте файл docker-compose.yml из репозитория.

version: "3.2"
services:
  postgres:
    image: flexberry/alt.p8-postgresql:latest
    ports:
     - 5432:5432
    volumes:
     - db:/var/lib/pgsql/data/
    environment:
      - POSTGRES_max_connections=${POSTGRES_max_connections}
    deploy:
      placement:
        constraints:
          - 'node.role==manager'

volumes:
  db:
Секция ports

Описание ports необходимо в том случае, когда к базе данных необходим доступ извне стека сервисов. Если доступ к базе данных осуществяется только в рамках сервисов, описанных в yml-файле, то с целью повышения защищенности создаваемого решения проброс порта 5432 для внешнего доступа желательно исключить. В рамках стека сервисов обращение к базе данных осуществляется по имени сервсиа (в данном случае postgres).

Секция environment

В секции environment инициализируются параметры конфиграционного файла postgres.conf. Список параметров приведен в файле postgres.conf. К имени параметра добавляется префикс POSTGRES_.

Секция volumes

При запуске сервиса обязательно необходимо каталог базы данных /var/lib/pgsql/data/ с помощью описателя volumes смонтировать на каталог HOST-системы. В противном случае Вы потеряете содержимое базы данных после рестарта контейнера сервиса. Для этого очень удобно использовать именованные тома (в нашем случае db). Если указанный именованный том не существует docker обеспечит его автоматическое создание и копирование содержимого каталога /var/lib/pgsql/data/ в именованный том. При использовании другим механизмов монтирования перед запуском сервиса необходимо обеспечить копирование каталога /var/lib/pgsql/data/ в монтируемый том. Именовые тома кроме секции services/../volumes необходимо перечислить и в корневой секции volumes.

Монтирование файла /etc/localtime сервиса на аналогичный файл HOST-системы обечпечивает соответствие временной зоны контейнера сервиса временной зоне HOST_системы.

Секция deploy

Секция deploy определяет узел кластера, где производится запуск сервиса. При запуске в режиме docker-compose данная секция не учитывается и запуск производится на текущем сервере.

Если стек сервисов в режиме docker swarm функционирует в кластере включающем более одного активного узла, то необходим описатель deploy/placement/constraints, в котором с помощью описателей node.labels, node.hostname и других необходимо однозначно определить узел на котором будет функционировать сервис и располагаться база данных. В данном случае мы ограничиваем запуск сервиса только узлом имеющим роль database и hostname postgres. Если ряд узлов в кластере поддерживают доступ к разделяемой файловой системе (GFS2, ...), то возможен альтернытивный запуск сервсиа на одном из узлов. В этом случае узлы помечаются меткой (role) и в условии constaints: указывается заданная метка узла. Если сервис запускается в кластере, состоящим из одного узла описатель deploy/placement/constraints не обязатален.

Создание файла описания параметров настройки сервиса .env

Файл описания переменных среды содержит инициализацию переменных в форамте:

имя_переменной=значение

Перед запуском сервера postres в контейнере сервиса инициализационный скрипт проверяет наличие в среде переменных с префиксом POTGRRES_. У найденных переменных удаляется указанный префикс и в файле конфигурации postgresql.conf заменяет значение переменнлй клнфигурации на указаное в переменной среды. В нашем примере параметр конфигурации max_connections конфигурационного файла postgresql.conf будет установлен в значение 250. На настоящий момент не поддерживается задание параметров конфигурации, включающих в имя символы :, '.'. В случае необходимости установки таких параметров возможна правка самого файла конфигурации postgresql.conf, распоможенного в именованном томе.

Запуск в режиме docker compose

Для запуска сервисов в режиме docker-compose наберите команду:

docker-compose up -p postgres up -d

При вызове желательно указать имя проекта в флаге -p. Этот флаг определяет префикс имен контейнеров и именованых томов. В противном случае имя проекта определится по имени текущего директория, что может быть неудобно и привести к проблемам (воссоздании заново именованого тома базы данных) при изменении имени директория.

Запуск в режиме docker swarm

При запуске в режиме docker swarm можно воспользоваться тем же файлом конфигурации docker-compose.yml. Но проблема в том, что в этом режиме не производится подстановка переменных среды из файла конфигурации .env. Это проблема решпется путем запуска команды docker-compose с параметром config. docker-composeна основе файла docker-compose.yml произведет подстановку переменных из файла .env, выведет результат подстановки на стандартный выход (stdout), который будет использован как файл конфигурации (-c -) для запуска сервисов в режиме docker swarm.

docker-compose config | docker stack deploy -c - postgres

Если Вы планируете использовать те же именовые тома, которые были созданы в режиме docker-compose укажите в качестве имени стека сервисов имя проекта docker-compose (в данном примере postgres).

Tag summary

Content type

Image

Digest

Size

115.6 MB

Last updated

about 6 years ago

docker pull flexberry/alt.p8-postgresql