PostgreSQL, také označovaný jako Postgres, je přední objektově-relační databázový systém. Je oblíbený díky vysoké úrovni souladu se standardem SQL a zahrnutím dalších funkcí, které zjednodušují práci se složitými datovými sadami ve velkém měřítku.
PostgreSQL používá tradiční architekturu klient-server, takže ji musíte spouštět nezávisle na kódu vaší aplikace. V této příručce nasadíte instanci serveru PostgreSQL jako kontejner Docker. Tím se vyhnete přidávání balíčků na váš hostitelský počítač a pomůžete izolovat vaši databázi od ostatních částí vašeho zásobníku. Než budete pokračovat, ujistěte se, že máte nainstalovaný Docker.
Začínáme
PostgreSQL má oficiální obrázek na Docker Hub, který je k dispozici v několika různých variantách. Tagy vám umožňují vybrat si mezi hlavními verzemi PostgreSQL od v9 do v14 a zvolit operační systém použitý jako základní obrázek. Nabízeny jsou Alpine, Debian Stretch a Debian Bullseye.
 Pro účely tohoto tutoriálu použijeme postgres:14 tag, který poskytuje PostgreSQL 14 na vrcholu Bullseye. Můžete si vybrat jinou verzi, která bude vyhovovat vašim požadavkům.
 Spusťte kontejner PostgreSQL pomocí docker run příkaz:
docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 
 Musíte zadejte hodnotu pro POSTGRES_PASSWORD proměnná prostředí. Toto definuje heslo, které bude přiřazeno výchozímu superuživatelskému účtu Postgres. Výchozí uživatelské jméno je postgres ale lze to změnit nastavením POSTGRES_USER proměnná prostředí.
 -v příznak se používá k připojení svazku Docker do datového adresáře kontejneru PostgreSQL. Pojmenovaný svazek s názvem postgres je odkazováno; Docker jej buď vytvoří, nebo znovu připojí svazek, pokud již existuje. K uložení databáze mimo kontejner byste měli použít svazek. Bez něj budete svá data používat, až se kontejner zastaví.
 PostgreSQL standardně naslouchá na portu 5432. Port kontejneru je svázán s portem 5432 na vašem hostiteli Docker pomocí -p vlajka. -d příznak se používá ke spuštění kontejneru v odpojeném režimu, čímž se efektivně stává službou na pozadí, která běží, dokud není zastavena pomocí docker stop .
Zadání hesla jako souboru
 Pokud je vám nepříjemné zadat heslo superuživatele jako příznak CLI s prostým textem, můžete jej místo toho vložit jako soubor prostřednictvím svazku. Poté byste měli nastavit POSTGRES_PASSWORD_FILE proměnná prostředí, která Postgresu poskytne cestu k tomuto souboru:
docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD_FILE=/run/secrets/postgres-password 
    -v ./postgres-password.txt:/run/secrets/postgres-password
    -v postgres:/var/lib/postgresql/data 
    postgres:14 
 Tato technika funguje také pro POSTGRES_USER a další podporované proměnné prostředí.
Připojování k vaší databázi
 Protože PostgreSQL byl vázán na port 5432 výše, mohli jste se připojit ke své databázi na localhost:5432 z libovolného kompatibilního klienta. Při spouštění kontejneru použijte přihlašovací údaje, které jste přiřadili jako proměnné prostředí.
 Obrázek Docker také obsahuje psql binární, které můžete vyvolat pomocí docker exec . Použijte to k rychlé interakci s vaší databází z prostředí PostgreSQL v kontejneru.
docker exec -it postgres psql -U postgres
Připojování z jiných kontejnerů dockeru
Vytvoření sítě Docker je preferovaným způsobem přístupu k PostgreSQL z jiných kontejnerů na stejném hostiteli. Tím se zabrání vázání portu serveru Postgres a potenciálnímu vystavení služby širší síti vašeho hostitele.
Vytvořte síť Docker:
docker network create my-app
 Spusťte svůj kontejner Postgres s připojením k síti pomocí --network příznak pomocí docker run :
docker run -d 
    --name postgres 
    --network my-app 
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 Nyní připojte kontejner aplikace ke stejné síti:
docker run -d
    --name api
    --network my-app
    my-api:latest 
 Kontejnery v síti mohou dosáhnout Postgres pomocí postgres hostname, protože toto je name přiřazena ke kontejneru Postgres. Pro dokončení připojení použijte port 5432.
Konfigurace PostgreSQL
 Možnosti serveru PostgreSQL můžete předat pomocí -c příznaky za názvem obrázku ve vašem docker run příkaz:
docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 -c max_connections=100 Vše po předání názvu obrázku do příkazu spuštěného v kontejneru. Tento příkaz bude binární soubor PostgreSQL serveru v případě obrazu Postgres.
 Při nastavování hodnot několika možností můžete použít vlastní konfigurační soubor. K připojení souboru do kontejneru budete muset použít jiný svazek Dockeru a poté zadat jeden -c příznak, který Postgresu dá pokyn, kam se má dívat:
docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./postgres.conf:/etc/postgresql/postgresql.conf 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 -c config_file=/etc/postgresql/postgresql.conf 
 Tento příklad používá připojení vazby Docker k získání postgres.conf soubor ve vašem pracovním adresáři připojený do kontejneru /etc/postgresql adresář. Odkaz na možnosti, které můžete nastavit pomocí binárních příznaků nebo direktiv konfiguračního souboru, naleznete v dokumentaci PostgreSQL.
Nasazení databáze
 Obraz Dockeru podporuje počáteční soubory umístěné do /docker-entrypoint-initdb.d adresář. Libovolný .sql nebo .sql.gz soubory budou spuštěny k inicializaci databáze. K tomu dojde po výchozím uživatelském účtu a postgres databáze byla vytvořena. Můžete také přidat .sh soubory ke spouštění libovolných skriptů shellu. Všechny skripty jsou prováděny v abecedním pořadí.
 Tento mechanismus znamená, že vše, co potřebujete k vytvoření databáze, je sada SQL nebo shell skriptů pojmenovaných ve správném sekvenčním pořadí. Připojte je do nového kontejneru pomocí -v příznak pomocí docker run :
docker run -d 
    --name postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v ./db-seed-files/:/etc/docker-entrypoint-initdb.d 
    -v postgres:/var/lib/postgresql/data 
    postgres:14 Inicializační skripty budou použity pouze v případě, že je datový adresář Postgres prázdný. Pro praktické účely to znamená, že se spustí při prvním spuštění kontejneru s připojeným novým prázdným objemem.
Vytvoření obrázku vlastní databáze
Můžete se rozhodnout zapouzdřit svůj konfigurační soubor a inicializační skripty do vlastního obrazu Dockeru. To by umožnilo komukoli s přístupem k obrázku vytvořit novou instanci PostgreSQL, která je předkonfigurována pro vaši aplikaci. Zde je jednoduchý Dockerfile, který můžete použít:
FROM postgres:14 COPY postgres.conf /etc/postgresql/postgresql.conf COPY db-seed-files/ /etc/docker-entrypoint-initdb.d/ CMD ["-c", "config_file=/etc/postgresql/postgresql.conf"]
Vytvořte si vlastní obrázek:
docker build -t custom-postgres:latest .
Pokyny k sestavení v Dockerfile zkopírují konfigurační soubor PostgreSQL a inicializační skripty z vašeho pracovního adresáře a vloží je do obrazu kontejneru. Nyní můžete spustit databázový kontejner, aniž byste museli ručně dodávat prostředky:
docker run -d 
    --name custom-postgres 
    -p 5432:5432
    -e POSTGRES_PASSWORD=<password> 
    -v postgres:/var/lib/postgresql/data 
    custom-postgres:latest Měli byste kontejnerizovat svou produkční databázi?
Může být obtížné rozhodnout, zda spustit databázi v Dockeru. Kontejnerování PostgreSQL usnadňuje nastavení, ale někdy je náročnější na údržbu. Při správě kontejneru musíte být opatrní, abyste předešli ztrátě dat v budoucnu. Docker také přidává skromnou režii na výkon, která stojí za zvážení, když předpokládáte, že databáze prohlídek bude pracovat s velmi velkými objemy dat.
Výhody Dockeru jsou zvýšená přenositelnost, snadné škálování a efektivita vývojářů. Kontejnerování databáze umožňuje komukoli vytvořit novou instanci pomocí Dockeru, aniž by bylo nutné nejprve ručně instalovat a konfigurovat PostgreSQL. Zápis souboru Dockerfile pro vaši databázi PostgreSQL, který přidá váš konfigurační soubor a skripty SQL seed, je proto dobrým způsobem, jak pomoci vývojářům rychle spustit nová prostředí.
Přehled
PostgreSQL je pokročilý databázový stroj založený na SQL, který přidává objektově relační schopnosti. I když se můžete rozhodnout spustit tradiční nasazení v produkci, použití kontejnerové instance zjednodušuje nastavení a pomáhá vývojářům rychle rozvinout jejich vlastní infrastrukturu.
Nejdůležitějším aspektem nasazení Dockerized je zajistit, že k ukládání dat používáte svazek. To vám umožní zastavit, nahradit a aktualizovat váš kontejner na novější verzi obrázku bez ztráty databáze. Kromě úložiště byste měli posoudit, jak se připojíte k Postgresu, a pokud to nebude nutné, vyvarujte se vázání portů k vašemu hostiteli. Při připojování z jiného kontejneru je pro usnadnění přístupu nejlepší použít sdílenou síť Docker.