Я использую изображение postgis/postgis
Docker для установки сервера базы данных для моего приложения.
- На сервере базы данных должно быть создано табличное пространство, затем база данных.
- Затем каждый раз, когда другое приложение запускается из другого контейнера, оно запускает сценарий
Liquibase
, который будет обновлять схему базы данных (создавать таблицы, индекс ...) при необходимости.
На терминале , чтобы подготовить контейнер базы данных, я выполняю следующие команды:
# Run a naked Postgis container
sudo docker run --name ecoemploi-postgis
-e POSTGRES_PASSWORD=postgres
-d -v /data/comptes-france:/data/comptes-france postgis/postgis
# Send 'bash level' commands to create the directory for the tablespace
sudo docker exec -it ecoemploi-postgis
bin/sh -c 'mkdir /tablespace && chown postgres:postgres /tablespace'
Затем, чтобы завершить мой шаг 1, мне нужно выполнить операторы SQL, чтобы создать табличное пространство с точки зрения PostGIS
и создаю базу данных с помощью CREATE DATABASE
.
Я подключаюсь вручную, под psql
моего контейнера:
sudo docker exec -it ecoemploi-postgis bin/sh
-c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR"
-p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
И запускаю вручную эти команды:
CREATE TABLESPACE data LOCATION '/tablespace';
CREATE DATABASE comptesfrance TABLESPACE data;
exit
Но я бы хотел создать контейнер из одного Dockerfile
, сделав всю необходимую работу. Сложность состоит в том, что это должно быть сделано в двух частях:
- Одна до запуска контейнера. (создание каталогов, предоставление им user: group).
- Один после того, как он запускается впервые: объявление табличного пространства и создание базы. Если я хорошо понимаю базовый образ, который я сделал, это следует сделать после запуска точки входа
docker-entrypoint.sh
?
Каков хороший способ написать Dockerfile
, создав контейнер, выполнив все эти шаги?