Postgres 9.6 images with tds_fdw extention Last release 9.6-1.1.2 - postgres 9.6.15
10K+
Образ flexberry/alt.p8-postgresql поддерживает функционал базы данных Postgres.
Характерные особенности образа:
docker-compose (например testpg)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
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 - имя каталога запуска контейнера.
Сконфигурируйте приложение для работы с базой данных указав:
127.0.0.1 если приложение запущено на том компьютере);5432);postgres;p@ssw0rdСтрока соединения при работе с локальным контейнером:
Server=localhost;Port=5432;User Id=postgres;Password=p@ssw0rd;Database=postgres;
Для остановки работы контейнера запустите в каталоге где он был запущен команду:
docker-compose down
База данных сохранится в именованом томе (testpg_db) и будет использована при следующем вызове конетейнера.
Для настройки необходимо:
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 необходимо в том случае, когда к базе данных необходим доступ извне стека сервисов.
Если доступ к базе данных осуществяется только в рамках сервисов, описанных в yml-файле, то с целью повышения защищенности создаваемого решения проброс порта 5432 для внешнего доступа желательно исключить. В рамках стека сервисов обращение к базе данных осуществляется по имени сервсиа (в данном случае postgres).
В секции environment инициализируются параметры конфиграционного файла postgres.conf.
Список параметров приведен в файле postgres.conf.
К имени параметра добавляется префикс POSTGRES_.
При запуске сервиса обязательно необходимо каталог базы данных /var/lib/pgsql/data/ с помощью описателя volumes смонтировать на каталог HOST-системы. В противном случае Вы потеряете содержимое базы данных после рестарта контейнера сервиса.
Для этого очень удобно использовать именованные тома (в нашем случае db).
Если указанный именованный том не существует docker обеспечит его автоматическое создание и копирование содержимого каталога /var/lib/pgsql/data/ в именованный том. При использовании другим механизмов монтирования перед запуском сервиса необходимо обеспечить копирование каталога /var/lib/pgsql/data/ в монтируемый том.
Именовые тома кроме секции services/../volumes необходимо перечислить и в корневой секции volumes.
Монтирование файла /etc/localtime сервиса на аналогичный файл HOST-системы обечпечивает соответствие временной зоны контейнера сервиса временной зоне HOST_системы.
Секция 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 up -p postgres up -d
При вызове желательно указать имя проекта в флаге -p. Этот флаг определяет префикс имен контейнеров и именованых томов.
В противном случае имя проекта определится по имени текущего директория, что может быть неудобно и привести к проблемам (воссоздании заново именованого тома базы данных) при изменении имени директория.
При запуске в режиме 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).
Content type
Image
Digest
Size
115.6 MB
Last updated
about 6 years ago
docker pull flexberry/alt.p8-postgresql