Въз основа на коментарите ще се опитам да отговоря тук.
Вярвам, че трябва да използвате изображението на postgres 11-alpine. И тук ще се опитам да обясня защо.
Официалните докер изображения идват с редица предимства, които винаги трябва да имате предвид, преди да започнете свой собствен.
- Пътят на надстройката е лесен - когато бъде пусната нова ревизия на приложението, обвито в изображението, официалният докер образ в повечето случаи ще бъде актуализиран заедно с него. И обикновено промените спазват конвенциите за конфигурация, които изображението е установило. Като променливи на средата, специфики при стартиране. Така че потребителите могат лесно да променят етикета в своите стекове и да надграждат. Разбира се, може да има критични промени - винаги проверявайте това.
- Голяма потребителска база - когато изображения като postgres са изтеглени повече от 10 милиона пъти (2019 г.), това не означава само, че е популярно, но по своята същност работи като гаранция, че изображението е щателно тествано. Всички елементарни грешки вече са отстранени и ще ви е лесно с изображението.
- Оптимизиран за размер и производителност - можете да сте сигурни, че е обърнато внимание на много детайли, минимизиране на размера на изображението и максимизиране на производителността. Много проекти публикуват приложенията си в няколко различни дистрибуции на Linux. Като postgres - те публикуват
debian
иalpine
базирани изображения.alpine
image е по-малкият, докатоdebian
е малко по-голям, но ви дава достъп до огромните хранилища на пакети на debian, ако имате нужда от инсталиране на допълнителни пакети. - Лесна конфигурация - поддържащите официални изображения обикновено разбират много добре тези случаи на използване на тяхната потребителска база. И те се опитват да направят живота ни като разработчици и администратори по-лесен (бог да ги благослови). Официалните изображения обикновено имат доста добра документация, намираща се точно на целевата им страница на докер хъб, или връзка към репо в github, където
README.md
ще обхваща общи случаи на употреба. Смятам, че тези инструкции си заслужават доброто четене отгоре надолу.
Разбирам, че искате да запазите изображението малко, но какво знаете - проектът postgres е покрил вашия случай на използване.
Най-новото alpine postgres изображение с етикет 11-alpine
има компресиран отпечатък от 28 MB и декомпресиран от 70MB . Докато archlinux/base
изображението, с което искате да започнете, има компресиран основен отпечатък от 153MB и декомпресиран размер от 445MB . И това е преди да представите самия 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 hub )
В заключение - бих препоръчал да не давате приоритет на дистрибуцията, на която се основава изображението, пред използваемостта и поддръжката. Docker ни позволява да изпълняваме приложения в контейнери, без наистина да се интересуваме много от това какво е дистрибуцията вътре в контейнера. И без това всичко е линукс. В края на деня очаквам, че искате стабилен контейнер за база данни postgres като мен. Това е, което получавам с официалното изображение на postgres.
Надявам се, че съм ви помогнал да оцените възможностите си по този въпрос.