GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak nasadit PostgreSQL jako Docker Container

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.


Docker
  1. Jak nainstalovat WordPress pomocí Docker

  2. Jak nasadit kontejner nginx s Dockerem na Linode

  3. Jak nainstalovat Docker a nasadit LAMP Stack

  1. Jak spustit MySQL v kontejneru Docker

  2. Jak SSH do kontejneru Docker

  3. Jak vypsat Docker kontejnery

  1. Jak přiřadit statickou IP ke kontejneru Docker

  2. Jak nainstalovat Vim do kontejneru Docker

  3. Jak opustit kontejner Docker