Skip to main content

Docker 部署 PostgreSQL 数据库

PostgreSQL(简称 "Postgres")是一个开源的关系型数据库管理系统,支持大多数 SQL 标准。它是由社区驱动的,具有广泛的支持和丰富的功能。

Postgres 与其他关系型数据库管理系统(如 MySQL 和 Oracle)类似,它允许用户创建、查询、更新和删除数据库中的数据。它还支持事务,允许用户回滚或提交对数据库的修改。

Postgres 特别适用于高度可扩展的应用程序,因为它支持主从复制和可扩展数据类型。它也支持大量的数据类型,包括常见的数值、字符串和日期类型,以及更复杂的类型,如 JSON 和 XML。

Postgres 可以在多种操作系统上运行,包括 Linux、Windows 和 macOS。它可以通过多种编程语言(如 Python、Java 和 C)连接,并且可以使用多种数据库管理工具(如 pgAdmin)来管理数据库。

DockerHub: postgres | DockerHub

Docker-Compose

version: "3.1"

services:
postgres:
image: postgres:12.13
container_name: "some-postgres"
restart: always
environment:
- POSTGRES_DB=example
- POSTGRES_USER=example
- POSTGRES_PASSWORD=example
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- postgres

pgadmin:
container_name: pgadmin_container
image: dpage/pgadmin4:6
environment:
- PGADMIN_DEFAULT_EMAIL=pgadmin4@pgadmin.org
- PGADMIN_DEFAULT_PASSWORD=admin
- PGADMIN_ENABLE_TLS=True
- PGADMIN_CONFIG_SERVER_MODE=False
- PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True
- PGADMIN_CONFIG_LOGIN_BANNER="Authorised users only!"
- PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10
volumes:
- ./pgadmin:/var/lib/pgadmin
- ./certificate.cert:/certs/server.certificate
- ./certificate.key:/certs/server.key
- ./servers.json:/pgadmin4/servers.json

ports:
- "${PGADMIN_PORT:-5050}:80"
networks:
- postgres
restart: unless-stopped

networks:
postgres:
driver: bridge

volumes:
postgres:
pgadmin:

运行 docker-compose -f stack.yml up 启动服务,访问 http://localhost:8080 或者 http://host-ip:8080 进入管理页面。

常用命令:

  • 启动: docker-compose -f stack.yml up
  • 后台启动: docker-compose -f stack.yml up -d
  • 检查状态: docker-compose ps
  • 停止: docker-compose -f stack.yml stop
  • 停止并删除: docker-compose -f stack.yml down
  • 查看日志: docker logs some-postgres

Docker

$ docker run -itd --name some-postgres --env POSTGRES_USER=example-user --env POSTGRES_PASSWORD=my_cool_secret --env PGDATA=/data/postgres -p 5432:5432 -v /my/own/datadir:/data/postgres postgres:latest
  • some-postgres 容器名称
  • -p 是指定 宿主端口:容器内服务端口,默认 5432
  • -v 设置数据库文件的映射,把宿主机上的目录 /my/own/datadir 与容器内的 /data/postgres 作关联关系