Контекст
Для локальной разработки и тестирования в конвейере CI я хочу образ postgres docker, содержащий некоторые данные, взятые из производства (несколько десятков МБ) , Я буду периодически перестраивать этот образ, чтобы выборочные данные оставались свободными sh.
Меня совершенно не волнует целостность данных, но меня мало волнует размер изображения и использование диска / памяти контейнера при запуске. Время запуска должно составлять не более пары минут.
То, что я построил
У меня есть файл docker, который создается поверх одного из официальных postgres (postgis) docker изображений, но фактически он инициализирует базу данных и использует pg_restore
для вставки моих образцов данных.
Попытка оптимизации
Я использую многоступенчатая сборка, просто копирование каталога postgres в окончательный образ (это помогает, поскольку я использовал узел во время сборки).
Я заметил, что каталог pg_xlog
довольно большой, и логически кажется здесь избыточным так как я с радостью проверил бы контрольно-пропускной пункт и угробил бы любой WAL прежде, чем запечатать изображение. Я не могу понять, как избавиться от этого. Я попытался запустить postgres со следующими флагами: -min_wal_size=2 --max_wal_size=3 --archive_mode=off --wal_keep_segments
и запустить Checkpoint
и подождать несколько секунд, но, похоже, это ничего не меняет. Я также попытался удалить содержимое каталога, но, похоже, это повредило базу данных при следующем запуске.
Вместо того, чтобы поместить фактическую базу данных в изображение, я мог бы просто оставить файл pg_dump
в изображении. и заставьте точку входа изображения построить базу данных из этого. Я думаю, что это улучшит размер изображения (хотя я не понимаю, почему база данных должна занимать гораздо больше места, чем дамп, если индексы не являются особенно большими - я на самом деле думал, что формат дампа был менее компактным, чем сама база данных, так что это может сместить размер индекса). Это, очевидно, повлияет на время запуска (но не слишком сильно).
Резюме / вопросы
Правильно ли я поступаю? Если да, то какие виды оптимизации дисков / памяти я могу использовать? В частности, я могу удалить / уменьшить pg_xlog
?
Я использую Postgres 9.5
и Postgis 2.X
.