欢迎来到窥视未来的博客

https://github.com/lwx57280 https://gitee.com/li_VillageHead

使用Docker-Compose部署PostgreSQL

创建项目目录

首先为项目创建一个目录。在这里,在我们的工作目录 /home/postgresql下创建一个名为 postgresql 的项目 :

 

[root@node13 postgresql]# pwd
/home/postgresql
[root@node13 postgresql]# 

该目录是应用程序镜像的上下文。该目录应该只包含用于构建该镜像的资源。

 

引用外部环境变量

创建 .env 环境变量配置

POSTGRES_USER=admin
POSTGRES_PASSWORD=admin123
PGADMIN_DEFAULT_EMAIL=admin@qq.com
PGADMIN_DEFAULT_PASSWORD=admin@123
POSTGRES_DB=postgres
PGADMIN_PORT=5050
POSTGRES_PORT=5432

 

构建 docker-compose文件

Docker Compose 简化了对整个应用程序堆栈的控制,使得在一个易于理解的 YAML 配置文件中轻松管理服务、网络和数据卷。要使用 Docker Compose 部署 PostgreSQL,首先需创建一个docker-compose.yml文件,如下所示:

 version: '3.5'

services:
  postgres:
    container_name: postgresql
    image: bitnami/postgresql:latest
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-pgadmin@123}
      POSTGRES_DB: ${POSTGRES_DB:-exampledb}
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8"
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    privileged: true
    env_file:
      - ./.env
    ports:
      - "${POSTGRES_PORT}:5432"
    volumes:
      - pgdata:/bitnami/postgresql:z
- /etc/localtime:/etc/localtime:ro - tablespace:/tablespace_location:z
- ${PWD}/log:/var/log/postgresql networks: - postgres restart: always hostname: postgresql

volumes:
  pgdata:
  tablespace:



networks:
  postgres:
#    driver: bridge
# 表示网络是在 Docker Compose 配置文件之外定义的,即它已经存在了
     external: true

postgres的服务定义中,包含如下指令:

  • image:指定了要使用的 Docker 镜像及其版本。在这里,我们使用了官方的 PostgreSQL 15.7 版本镜像。为了确保系统的稳定性和兼容性,推荐使用 PostgreSQL 官方镜像的一个稳定版本而不是最新版(latest)。通常来说,生产环境中应该避免使用 latest 标签,因为它指向最新的版本,而最新版本可能包含未经充分测试的特性或变化,这可能会影响到生产环境的稳定性。

  • container_name:自定义的容器名称 docker_postgres,便于识别。

  • environment:设置环境变量。我们为 PostgreSQL 数据库设置了密码 root。请将其更改为更安全的密码。这是postgres默认管理员账户的密码。由于这个值是必需的,如果没有设置,容器将无法启动。

  • ports:用来将容器的端口映射到宿主机的端口,使得宿主机能够与集群进行通信。通常,只有服务需要直接从宿主机的网络访问时,我们才会映射端口。将容器的 5432 端口映射到宿主机的 5432 端口,使外部可访问 PostgreSQL。

  • volumes:实现数据持久化的关键部分。PostgreSQL 存储数据在 /var/lib/postgresql/data 路径,日志存储在 /var/log/postgresql 路径。postgres_db 服务将这两个路径映射到宿主机的数据卷的 data 和 log 的数据卷上。这意味着即使容器被删除,存储在这两个数据卷上的数据也不会丢失,实现了数据的持久化。配置日志数据卷是一个好的实践,它可以帮助你更好地管理和保存日志文件,以便于问题诊断和性能监控。

  • logging:可以通过 logging 选项对容器日志做了简单的管理配置,例如限制日志文件的最大大小为 10MB,且最多保留3个日志文件。这有助于避免日志文件占用过多的磁盘空间。

  • networks: 将服务连接到 pub-network 网络上。这个网络在 networks 一级 key 中声明已经创建,Docker Compose 不需要尝试创建它。加入这个网络之后,不同服务就可以通过服务名 postgres_db 找到并实现容器间以及跨项目的网络访问。

这个docker-compose.yml文件是 PostgreSQL 部署的基础模板,它涵盖了启动、配置和持久化 PostgreSQL 实例的基本方面,同时还考虑了服务间网络连接的需求。根据具体需求,可能需要对配置进行调整(比如,环境变量的值或者镜像版本)。

 

部署

在有了docker-compose.yml文件后,您需要在包含此文件的目录中运行如下命令启动服务:

 

docker-compose -f docker-compose.yml up -d

 

验证

部署后,使用以下命令检查容器状态:

[root@node13 postgresql]# docker-compose ps
   Name                 Command               State           Ports         
----------------------------------------------------------------------------
postgresql   /opt/bitnami/scripts/postg ...   Up      0.0.0.0:5432->5432/tcp
[root@node13 postgresql]# 

 

尝试使用PostgreSQL客户端连接访问

 至此PostgreSQL数据库环境搭建完成

 

posted on 2025-06-02 13:46  窥视未来  阅读(2692)  评论(2)    收藏  举报

导航