На основании комментариев постараюсь ответить здесь.
Я считаю, что вы должны использовать изображение postgres 11-alpine. И я постараюсь объяснить, почему здесь.
Официальные образы докеров имеют ряд преимуществ, которые вы всегда должны учитывать, прежде чем создавать свои собственные.
- Путь обновления прост: - при выходе новой версии приложения, обернутого в образ, официальный образ докера в большинстве случаев будет обновляться вместе с ним. И обычно изменения соответствуют соглашениям о конфигурации, установленным образом. Такие как переменные среды, особенности запуска. Так что пользователи могут просто поменять тег в своих стеках и обновить. Конечно, могут быть критические изменения - всегда проверяйте это.
- Большая база пользователей - когда изображения, такие как postgres, были загружены более 10 миллионов раз (2019), это не только означает, что оно популярно, но по сути работает как гарантия того, что изображение было проверено полностью Любые элементарные ошибки уже отсеяны, и вы легко справитесь с изображением.
- Оптимизирован по размеру и производительности - вы можете быть уверены, что большое внимание было уделено деталям, минимизируя размер изображения и максимизируя производительность. Многие проекты публикуют свои приложения на нескольких разных дистрибутивах Linux. Как и postgres - они публикуют изображения
debian
и alpine
. Образ alpine
является меньшим, тогда как debian
немного больше, но дает вам доступ к обширным репозиториям пакетов Debian, если вам нужны дополнительные пакеты.
- Простая настройка - разработчики официальных изображений обычно понимают, что случаи использования их пользовательских баз очень хороши. И они пытаются сделать нашу жизнь как разработчиков и администраторов проще (храни их бог). Официальные изображения обычно имеют довольно хорошую документацию, расположенную прямо на целевой странице докера, или ссылку на репозиторий github, где
README.md
будет охватывать распространенные случаи использования. Я считаю, что эти инструкции заслуживают хорошего прочтения сверху вниз.
Я понимаю, что вы хотите, чтобы изображение было небольшим, но что вы знаете - в проекте postgres ваш сценарий использования покрыт.
Последнее изображение Alpine postgres с тегом 11-alpine
имеет сжатый размер 28 МБ и распаковано 70 МБ . В то время как образ archlinux/base
, с которого вы хотите начать, имеет сжатый базовый размер 153 МБ и распакованный размер 445 МБ . И это до того, как вы представите сам postgres.
Добавьте к этому, что база данных и пользователь, которого вы хотите создать при запуске, могут обрабатываться только в переменных среды для официального образа postgres. Как это:
docker run -d --name some-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=simha \
-e POSTGRES_DB=btgapp \
postgres:11-alpine
Если это не охватывает инициализацию, необходимую для вашей базы данных, вы можете скопировать .sql
сценарии (и .sh
сценарии) в специальное место на изображении - и они будут выполнены при запуске. Для этого вы можете расширить свое изображение так:
init-user-db.sh
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER simha;
CREATE DATABASE btgapp;
GRANT ALL PRIVILEGES ON DATABASE btgapp TO simha;
EOSQL
А потом с Dockerfile
вот так:
Dockerfile
FROM postgres:11-alpine
COPY ./init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
(взято из описания postgres на док-хабе )
В заключение - я бы порекомендовал вам не отдавать приоритет дистрибутиву, на котором основано изображение, по сравнению с удобством использования и ремонтопригодностью. Docker позволяет нам запускать приложения в контейнерах, не слишком заботясь о том, что дистрибутив находится внутри контейнера. Это все Linux в любом случае. В конце концов, я ожидаю, что вам нужен стабильный контейнер базы данных postgres, такой как я. Это то, что я получаю с официальным изображением postgres.
Я надеюсь, что помог вам оценить ваши варианты по этому вопросу.