Thread: Постргис в докере

Постргис в докере

From
"Dmitry E. Oboukhov"
Date:
я тут начал копаться с docker

беру docker postgresql:version

запускаю сервисом
затем запускаю свои CI-скрипты

в них делается условный

make create_or_update_db test

то есть сперва накатываем структуру/данные в Pg в докере а потом
пускаем на нем тесты.


все бы ничего, но миграций скопилось довольно много и сейчас создание
просто структуры БД для тестов занимает где-то 15 минут.

что хочу:

хочу докер, желательно прямой наследник от постгрисовых докеров с Pg у
которого БД чем-то заполнена.
причем заполнение чтобы осуществлялось через коннект/протокол.

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

1. берем docker, например postgresq:9.5
2. запускаем
3. из другого докера коннектим к нему и заполняем данными (потому что
инфраструктура наполнения данными и слежения за миграциями большая и
отдельная, расчитанная на продакшены итп)
4. каким-то образом фиксируем состояние постгриса в докере с новым именем
5. дальше пользуемся результатом на пункте 4 вместо postgresql:9.5


Вопрос: как можно просто реализовать пункт 4?

--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

Attachment

Re: Постргис в докере

From
Andy Fefelov
Date:
Добрый день

Монтируйте том с данными снаружи в контейнер - заряжайте в него свои данные.
После первоначального наполнения копируйте по необходимости в CI pipeline.


2018-08-02 14:33 GMT+05:00 Dmitry E. Oboukhov <unera@debian.org>:
я тут начал копаться с docker

беру docker postgresql:version

запускаю сервисом
затем запускаю свои CI-скрипты

в них делается условный

make create_or_update_db test

то есть сперва накатываем структуру/данные в Pg в докере а потом
пускаем на нем тесты.


все бы ничего, но миграций скопилось довольно много и сейчас создание
просто структуры БД для тестов занимает где-то 15 минут.

что хочу:

хочу докер, желательно прямой наследник от постгрисовых докеров с Pg у
которого БД чем-то заполнена.
причем заполнение чтобы осуществлялось через коннект/протокол.

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

1. берем docker, например postgresq:9.5
2. запускаем
3. из другого докера коннектим к нему и заполняем данными (потому что
инфраструктура наполнения данными и слежения за миграциями большая и
отдельная, расчитанная на продакшены итп)
4. каким-то образом фиксируем состояние постгриса в докере с новым именем
5. дальше пользуемся результатом на пункте 4 вместо postgresql:9.5


Вопрос: как можно просто реализовать пункт 4?

--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

RE: Постргис в докере

From
"Ilya Dyoshin"
Date:
Все просто: 

Создается свой собственный docker-image с предопределенной базой данных. 

Копируем оригинальный docker-image который  опубликован для постгреса. 

И в конце 

RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 5432
CMD ["postgres"]



Меняешь на что-то такое: 
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat

RUN docker-entrypoint.sh && sleep 1000  && make create_or_update_db test   

ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]


По-идее должно сработать и простое наследование 

FROM postgresql:version
RUN docker-entrypoint.sh && sleep 1000 && make create_or_update_db test
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]



И сохраняшешь получившийся контейнер. Тегаешь и отправляешь в свой репозиторий. 

Потом просто: 
FROM mytestingpostgresql:latest 
RUN make additional_db_modification 





Как-то так









-----Original Message-----
From: Dmitry E. Oboukhov <unera@debian.org> 
Sent: Thursday, August 2, 2018 12:34 PM
To: pgsql-ru-general@lists.postgresql.org
Subject: Постргис в докере

я тут начал копаться с docker

беру docker postgresql:version

запускаю сервисом
затем запускаю свои CI-скрипты 

в них делается условный

make create_or_update_db test

то есть сперва накатываем структуру/данные в Pg в докере а потом пускаем на нем тесты.


все бы ничего, но миграций скопилось довольно много и сейчас создание просто структуры БД для тестов занимает где-то 15
минут.

что хочу:

хочу докер, желательно прямой наследник от постгрисовых докеров с Pg у которого БД чем-то заполнена.
причем заполнение чтобы осуществлялось через коннект/протокол.

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

1. берем docker, например postgresq:9.5
2. запускаем
3. из другого докера коннектим к нему и заполняем данными (потому что инфраструктура наполнения данными и слежения за
миграциямибольшая и отдельная, расчитанная на продакшены итп) 4. каким-то образом фиксируем состояние постгриса в
докерес новым именем 5. дальше пользуемся результатом на пункте 4 вместо postgresql:9.5
 


Вопрос: как можно просто реализовать пункт 4?

-- 

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

Re: Постргис в докере

From
"Dmitry E. Oboukhov"
Date:
> ENTRYPOINT ["docker-entrypoint.sh"]
> EXPOSE 5432
> CMD ["postgres"]

> По-идее должно сработать и простое наследование



проблема в том что make create_or_update_db - не может быть запущено в
окружении образа (даже отнаследованного) postgresql:version


я сейчас копаюсь с вот такой фигней

1. запускаю postgresql:version с указанием --name
2. запускаю докер с make create_or_update_db и делаю --link по name
между ними
3. указание --name получается как бы расшаривает один pg между
множеством докеров-тестов и create_or_update_db у них на все один

в name включил sha256 от версии из create_or_update_db: таким образом
изменения в инфраструктуре Pg рождают новый контейнер-докер

все в целом ок, но есть пара проблем

1. когда два докера выполняют один create_or_update_db параллельно и
соревнуются друг с дружкой
2. при естественной миграции вперед по версиям копятся запущенные
постгрисы

хотел как-то сюда приспособить docker commit, но пока не получается
валидно его перезапустить.

вот имеем docker postgres:version

в него нафигачили данных через сеть.
далее делаем на него docker commit, вроде все ок.
а вот новый run на уже закоммиченный как правильно сделать?

--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

Attachment