dockerpgsql: 将PostgreSQL数据库运行在Docker容器内

一、使用dockerpgsql的好处

1、便于管理和部署:通过使用dockerpgsql,管理员可以很方便地管理和部署PostgreSQL数据库,无需考虑在操作系统上进行安装和配置的问题。

2、可靠性和安全性:通过容器化PostgreSQL数据库,它们可以隔离在容器内,避免不同数据所带来的安全隐患。同时,每个容器都有独立的文件系统,可以防止容器之间的数据干扰和相互影响。

3、易于扩展:使用dockerpgsql,管理员可以很容易地为正在运行的PostgreSQL容器添加新的资源。这样可以实现动态的资源分配,在高峰时段自动扩展容器来满足请求。

二、在dockerpgsql容器中运行PostgreSQL数据库

要在dockerpgsql容器中运行PostgreSQL,需要进行以下步骤:

1、创建dockerpgsql镜像:

FROM postgres:11.2
RUN mkdir -p /etc/postgresql \
    && mkdir -p /var/run/postgresql \
    && chown -R postgres:postgres /etc/postgresql /var/run/postgresql
COPY postgresql.conf /etc/postgresql/
COPY pg_hba.conf /etc/postgresql/
EXPOSE 5432
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

2、创建docker-compose.yml文件:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin

3、运行docker-compose命令:

docker-compose up

三、数据的挂载和备份

在PostgreSQL容器中,数据是存储在容器内的。要将数据挂载到宿主机上,需要进行以下步骤:

1、创建一个磁盘卷:

docker volume create pgdata

2、在docker-compose.yml文件中指定挂载路径:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
volumes:
  pgdata:

3、使用pg_dump进行备份:

pg_dump -U postgres -F c my_db > my_db.dump

四、网络配置和端口映射

在默认情况下,PostgreSQL容器运行在自己的网络命名空间中,并且只能通过容器的IP地址访问。要通过其他主机访问容器运行的PostgreSQL数据库,需要进行以下步骤:

1、指定容器中PostgreSQL数据库使用的端口(默认5432):

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    ports:
      - "5432:5432"

2、使用宿主机网络:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    network_mode: host

五、Docker Compose的使用技巧

1、使用Docker网络进行容器之间的通信:

在一个Docker Compose项目中,可以创建多个容器。如果这些容器需要相互通信,可以使用Docker网络进行连接。在docker-compose.yml文件的顶部指定网络名称:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    networks:
      - mynetwork
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    networks:
      - mynetwork
networks:
  mynetwork:

2、使用环境变量:

在docker-compose.yml文件中,可以使用环境变量来设置服务配置。这样可以避免在修改配置时对docker-compose.yml文件进行频繁的修改。例如:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

在运行时,可以通过设置环境变量来传递值:

export POSTGRES_PASSWORD=123456
docker-compose up

原创文章,作者:AYOZU,如若转载,请注明出处:https://www.506064.com/n/333531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AYOZUAYOZU
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相关推荐

  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • openeuler安装数据库方案

    本文将介绍在openeuler操作系统中安装数据库的方案,并提供代码示例。 一、安装MariaDB 下面介绍如何在openeuler中安装MariaDB。 1、更新软件源 sudo…

    编程 2025-04-29
  • 数据库第三范式会有删除插入异常

    如果没有正确设计数据库,第三范式可能导致删除和插入异常。以下是详细解释: 一、什么是第三范式和范式理论? 范式理论是关系数据库中的一个规范化过程。第三范式是范式理论中的一种常见形式…

    编程 2025-04-29
  • leveldb和unqlite:两个高性能的数据库存储引擎

    本文将介绍两款高性能的数据库存储引擎:leveldb和unqlite,并从多个方面对它们进行详细的阐述。 一、leveldb:轻量级的键值存储引擎 1、leveldb概述: lev…

    编程 2025-04-28
  • Python怎么导入数据库

    Python是一种高级编程语言。它具有简单、易读的语法和广泛的库,让它成为一个灵活和强大的工具。Python的数据库连接类型可以多种多样,其中包括MySQL、Oracle、Post…

    编程 2025-04-28
  • Think-ORM数据模型及数据库核心操作

    本文主要介绍Think-ORM数据模型建立和数据库核心操作。 一、模型定义 Think-ORM是一个开源的ORM框架,用于简化在PHP应用中(特别是ThinkPHP)与关系数据库之…

    编程 2025-04-27
  • 如何使用Python将CSV文件导入到数据库

    CSV(Comma Separated Values)是一种可读性高、易于编辑与导入导出的文件格式,常用于存储表格数据。在数据处理过程中,我们有时需要将CSV文件导入到数据库中进行…

    编程 2025-04-27
  • Python批量导入数据库

    本文将介绍Python中如何批量导入数据库。首先,对于数据分析和挖掘领域,数据库中批量导入数据是一个必不可少的过程。这种高效的导入方式可以极大地提高数据挖掘、机器学习等任务的效率。…

    编程 2025-04-27
  • Activiti 6自动部署后不生成数据库act_hi_*的解决方法

    本文将从多个方面详细阐述Activiti 6自动部署后不生成数据库act_hi_*的问题,并提供对应的代码示例。 一、问题分析 在使用Activiti 6部署流程后,我们发现act…

    编程 2025-04-27
  • Python更新数据库数据

    Python更新数据库数据是一个非常实用的功能。在工作中,我们经常需要从外部获取数据,然后将这些数据保存到数据库中,或者对现有数据库中的数据进行更新。Python提供了许多库和框架…

    编程 2025-04-27

发表回复

登录后才能评论