PostgreSQL container
PostgreSQL суулгахад уламжлалт аргаар олон алхам шаардлагатай. Docker ашиглавал нэг командаар ажиллуулна.
Хурдан эхлүүлэх
docker run -d \
--name mydb \
-e POSTGRES_PASSWORD=mysecretpassword \
-p 5432:5432 \
postgres:16
Энэ л хангалттай. PostgreSQL контейнер ажиллаж байна.
Environment variable-ууд
postgres image дараах environment variable-уудыг дэмждэг:
docker run -d \
--name mydb \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
postgres:16
| Variable | Утга | Анхдагч |
| ------------------- | -------------------- | ------------------------ |
| POSTGRES_PASSWORD | Нууц үг — заавал | — |
| POSTGRES_USER | Хэрэглэгчийн нэр | postgres |
| POSTGRES_DB | Database нэр | POSTGRES_USER-тэй адил |
psql-ээр холбогдох
Container дотроос:
docker exec -it mydb psql -U myuser -d myapp
Хостоос (psql суусан бол):
psql -h localhost -p 5432 -U myuser -d myapp
psql дотор:
-- Database-уудыг харах
\l
-- Хүснэгтүүдийг харах
\dt
-- Гарах
\q
Volume — өгөгдлийг хадгалах
Container устгагдахад өгөгдөл ч устдаг. Volume ашиглавал өгөгдөл хадгалагдана:
docker run -d \
--name mydb \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:16
pgdata нэртэй Docker volume үүсгэж, PostgreSQL-ийн өгөгдлийн фолдерт холбоно.
Container устгаад дахин үүсгэхэд өгөгдөл хэвээр байна:
docker stop mydb
docker rm mydb
# Дахин үүсгэх — өгөгдөл хэвээр
docker run -d \
--name mydb \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
postgres:16
Анхны SQL скрипт ажиллуулах
/docker-entrypoint-initdb.d/ фолдерт .sql файл mount хийвэл container эхэлж байхад автоматаар ажиллана:
docker run -d \
--name mydb \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=myapp \
-p 5432:5432 \
-v pgdata:/var/lib/postgresql/data \
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql \
postgres:16
init.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
INSERT INTO users (username) VALUES ('admin');
Анхааруулга: Өгөгдлийн сан аль хэдийн үүссэн бол (volume байгаа бол) энэ скрипт дахин ажиллахгүй.
Docker Compose-тай ашиглах
Апп болон database-ийг хамт ажиллуулах:
services:
db:
image: postgres:16
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mysecretpassword
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U myuser -d myapp"]
interval: 10s
timeout: 5s
retries: 5
app:
build: .
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://myuser:mysecretpassword@db:5432/myapp
depends_on:
db:
condition: service_healthy
volumes:
pgdata:
depends_on + healthcheck — database бэлэн болсны дараа апп эхэлнэ.
Нэмэлт PostgreSQL container-ууд
pgAdmin — GUI хэрэгсэл:
docker run -d \
--name pgadmin \
-e PGADMIN_DEFAULT_EMAIL=admin@example.com \
-e PGADMIN_DEFAULT_PASSWORD=admin \
-p 5050:80 \
dpage/pgadmin4
http://localhost:5050 — pgAdmin нээгдэнэ.
Нэг network-т оруулах:
docker network create mynetwork
docker run -d --name mydb --network mynetwork \
-e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name pgadmin --network mynetwork \
-p 5050:80 \
-e PGADMIN_DEFAULT_EMAIL=admin@example.com \
-e PGADMIN_DEFAULT_PASSWORD=admin \
dpage/pgadmin4
pgAdmin-д холболт нэмэхдээ hostname: mydb гэж бичнэ.
Backup ба restore
# Backup
docker exec mydb pg_dump -U myuser myapp > backup.sql
# Restore
docker exec -i mydb psql -U myuser myapp < backup.sql
Дараагийн хичээлд:
Docker Hub болон бусад registry-д image хэрхэн байршуулах, татаж авах талаар үзнэ.