Do cài qua Portainer nên không dùng docker-compose.yml. Dưới đây là một mẫu file yml để tiện dùng về sau.
version: '3.8'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: youruser
POSTGRES_PASSWORD: yourpassword
POSTGRES_DB: yourdb
networks:
- pg-network
volumes:
- pg-data:/var/lib/postgresql/data
ports:
- "5432:5432" # 👈 mở port
#- "127.0.0.1:5432:5432" # --> Chỉ mở port cho local (dùng trên production)
pgadmin:
image: dpage/pgadmin4:latest
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "8080:80"
networks:
- pg-network
depends_on:
- postgres
networks:
pg-network:
driver: bridge
volumes:
pg-data:Nếu không dùng docker-compose thì về cơ bản dùng chung một network (chẳng hạn pg-network như trên file compose kia) là được.
Để tạo một network riêng trên docker:
docker network create pg-network
Tiếp đến, mình cần tạo một volume riêng (vùng riêng trên ổ đĩa để lưu dữ liệu, nếu xóa hoặc cập nhật container)
docker volume create pg-data
Nếu không dùng Portainer thì chạy 2 lệnh sau, thay các dữ liệu cá nhân về mật khẩu, email vv… Điểm quan trọng là 2 container này cần chung 1 network.
docker run -d --name postgres --network pg-network \ -e POSTGRES_USER=youruser \ -e POSTGRES_PASSWORD=yourpassword \ -e POSTGRES_DB=yourdb \ -v pg-data:/var/lib/postgresql/data \ --restart unless-stopped \ postgres:latest docker run -d --name pgadmin --network pg-network -p 8080:80 -e [email protected] -e PGADMIN_DEFAULT_PASSWORD=admin dpage/pgadmin4:latest
Trong Portainer thì tùy chỉnh qua giao diện UI nên trực quan hơn. Chú ý tùy chọn khởi động lại khi nào. Nên chọn unless-stopped.
Để login vào trong container đã cài qua docker:
docker exec -t postgres bash
Lệnh trên sẽ login vào trong container và mở bash.
Để sao lưu database:
docker exec -t postgres-container pg_dump -U username -d test_database -F p > /path/to/backup.sql
Có tham khảo tại https://vuyisile.com/running-postgresql-in-docker/