Na podstawie komentarzy postaram się odpowiedzieć tutaj.
Uważam, że warto wybrać postgres 11-alpine image. I postaram się wyjaśnić, dlaczego tutaj.
Oficjalne obrazy dokowane mają wiele zalet, które należy zawsze rozważyć przed rozpoczęciem tworzenia własnych.
- Ścieżka aktualizacji jest łatwa - po wydaniu nowej wersji aplikacji umieszczonej w obrazie, wraz z nią zostanie w większości przypadków zaktualizowany oficjalny obraz dokowany. I zwykle zmiany są zgodne z konwencjami konfiguracji ustanowionymi przez obraz. Takie jak zmienne środowiskowe, specyfika uruchamiania. Dzięki temu użytkownicy mogą łatwo zmieniać tag w swoich stosach i aktualizować. Oczywiście mogą nastąpić przełomowe zmiany - zawsze to sprawdź.
- Duża baza użytkowników - gdy obrazy takie jak postgres zostały pobrane ponad 10 milionów razy (2019), oznacza to nie tylko, że jest popularny, ale z natury działa jak gwarancja, że obraz został dokładnie przetestowany. Wszelkie podstawowe błędy zostały już wyeliminowane i będziesz miał łatwy czas z obrazem.
- Zoptymalizowany pod kątem rozmiaru i wydajności - masz pewność, że zwrócono uwagę na wiele detali, minimalizując wielkość obrazu i maksymalizując wydajność. Wiele projektów publikuje swoje aplikacje na kilku różnych dystrybucjach linuxa. Podobnie jak postgres - publikują
debian
ialpine
na podstawie obrazów.alpine
image jest mniejszy, podczas gdydebian
jest nieco większy, ale daje dostęp do obszernych repozytoriów pakietów Debiana, jeśli potrzebujesz zainstalować dodatkowe pakiety. - Łatwa konfiguracja - opiekunowie oficjalnych obrazów zazwyczaj bardzo dobrze rozumieją przypadki użycia ich bazy użytkowników. I starają się ułatwić nam życie jako programistów i administratorów (niech Bóg ich błogosławi). Oficjalne obrazy zwykle mają całkiem niezłą dokumentację znajdującą się bezpośrednio na ich stronie docelowej w centrum docker lub link do repozytorium github, gdzie
README.md
obejmie typowe przypadki użycia. Uważam, że te instrukcje są warte dobrego przeczytania od góry do dołu.
Rozumiem, że chcesz, aby obraz był mały, ale co wiesz - projekt postgres obejmuje twoje zastosowanie.
Najnowszy obraz alpejskiego postgresu oznaczony tagiem 11-alpine
ma skompresowaną powierzchnię 28 MB i zdekompresowane 70 MB . Podczas gdy archlinux/base
obraz, od którego chcesz zacząć, ma skompresowany rozmiar podstawy 153 MB i zdekompresowany rozmiar 445 MB . I to jest zanim przedstawisz sam postgres.
Dodaj do tego, że baza danych i użytkownik, który chcesz utworzyć przy starcie - mogą być obsługiwane w samych zmiennych środowiskowych dla oficjalnego obrazu postgres. Tak:
docker run -d --name some-postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_USER=simha \
-e POSTGRES_DB=btgapp \
postgres:11-alpine
Jeśli to nie obejmuje inicjalizacji, której potrzebujesz dla swojej bazy danych, możesz skopiować .sql
skrypty (i .sh
skrypty) do specjalnej lokalizacji w obrazie - i zostaną wykonane przy starcie. W tym celu możesz rozszerzyć ich obraz w ten sposób:
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
A potem za pomocą Dockerfile
tak:
Dockerfile
FROM postgres:11-alpine
COPY ./init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
(Jest to zaczerpnięte z opisu postgresa w centrum dockera )
Na zakończenie - sugerowałbym, aby nie traktować priorytetowo dystrybucji, na której opiera się obraz, a nie użyteczności i konserwacji. Docker umożliwia nam uruchamianie aplikacji w kontenerach, nie przejmując się zbytnio tym, jaka dystrybucja znajduje się w kontenerze. W każdym razie to wszystko linux. Pod koniec dnia spodziewam się, że potrzebujesz stabilnego kontenera bazy danych postgres, takiego jak ja. Oto, co otrzymuję z oficjalnym obrazem postgres.
Mam nadzieję, że pomogłem Ci ocenić Twoje możliwości w tym zakresie.