Лучшие практики для инициализации контейнера Dog PostgreSQL с некоторыми данными

postgresql docker

1120 просмотра

1 ответ

6284 Репутация автора

Я создал образ докера с PostgreSQL, работающим внутри и показывающим порт 5432. Это изображение не содержит никакой базы данных внутри. Контейнер - это пустой сервер базы данных PostgreSQL.

Я хотел бы в (или во время) команду "Docker Run":

  • прикрепить файл БД
  • создать БД через выполнение SQL-запроса
  • восстановить БД из дампа

Я не хочу хранить данные после закрытия контейнера. Это просто временный сервер разработки.

Я подозреваю, что моя командная строка "docker run" может быть достаточно короткой / простой.

Вероятно, там можно смонтировать некоторую внешнюю папку с помощью db / sql / dump в команде run, а затем создать db во время инициализации контейнера.

Каков наилучший / рекомендуемый способ и лучшие практики для выполнения этой задачи? Возможно, кто-то может указать мне на соответствующие примеры докеров.

Автор: TSV Источник Размещён: 18.07.2016 10:01

Ответы (1)


2 плюса

1288 Репутация автора

Решение

Это хороший вопрос и, возможно, что-то, что другие люди задавали себе более одного раза.

Согласно руководству по докеру, вы не должны делать это в команде RUN. Вместо этого вы должны создать себе ENTRYPOINT или CMD в вашем Dockerfile, который вызывает пользовательский сценарий оболочки вместо вызова директивы процесса postgres. В этом случае БД будет создана в «реальной» файловой системе, но затем очищена во время закрытия контейнера.

Как это будет работать? Контейнер запускается, вызывает ENTRYPOINT или CMD как обычно и использует сценарий инициализации для заполнения БД. Затем в тот момент, когда контейнер остановлен, тот же сценарий получит уведомление с сигналом и вручную отбросит содержимое базы данных.

CMD ["cleanAndRun.sh"]

Набросанный скрипт "cleanAndRun.sh" взят из документации Docker и изменен для ваших нужд. Пожалуйста, помните, что это только эскиз и нуждается в модификации:

#!/bin/sh

# The script that is called in the trap must also stop the DB, so below call to
# dropdb is not enough, it just demonstrates how to call anything in the stop-container scenario!
trap "dropdb <params>" HUP INT QUIT TERM

# init your DB -every- time container starts
<init script to import to clean and import dump>

# start your postgres DB
postgres

echo "exited $0"
Автор: Peter Branforn Размещён: 20.09.2018 01:35
Вопросы из категории :
32x32