使用 Docker 部署和管理 PostgreSQL

阅读时长 9 分钟读完

前言

PostgreSQL是一个功能强大,高度可扩展的开源数据库管理系统,广泛用于各种企业和个人应用。然而,部署和管理PostgreSQL可能会存在一些困难,特别是当需要使用多种版本或在不同的开发和生产环境中时。Docker是一种高效且强大的虚拟化技术,使得在不同环境中部署和管理PostgreSQL变得非常容易。本文将介绍如何使用Docker部署和管理PostgreSQL,以及如何在生产环境中进行高可用和故障恢复。

Docker安装与使用

Docker是一种容器化技术,它能够将应用程序及其依赖项打包成一个可移植的容器,使其能够在不同的环境中运行。下面让我们看一下如何安装和使用Docker。

安装Docker

在Ubuntu系统中,可以使用下面的命令安装Docker:

配置Docker

在安装完成Docker之后,需要对其进行一些配置。

首先,需要将当前用户加入docker用户组,以便不需要使用sudo也能执行Docker命令。可以使用以下命令:

然后,需要重新登录用户才能使上面的更改生效。

接下来,可以使用以下命令测试Docker是否正确安装:

如果一切顺利,将输出以下内容:

使用Docker

在安装和配置Docker之后,可以使用Docker CLI(命令行界面)来创建,运行和管理容器。

下面的命令将下载最新版本的PostgreSQL镜像,并将其作为一个容器运行:

这个命令创建了一个名为postgresql-container的容器,设置了一个名为POSTGRES_PASSWORD的环境变量以指定密码,并使用-d选项在后台运行。

要停止和删除容器,可以运行以下命令:

使用Docker Compose

Docker Compose是一个用于定义和运行多个Docker容器的工具,可以创建和管理多个容器、卷和网络。

安装Docker Compose

可以使用以下命令安装Docker Compose:

使用Docker Compose

在安装Docker Compose之后,可以使用docker-compose.yml文件来定义和运行多个容器。下面是一个简单的docker-compose.yml文件,用于创建一个包含PostgreSQL和pgAdmin的应用程序:

-- -------------------- ---- -------
-------- ---
---------
  -----------
    ------ --------
    -------- ------
    ------------
      ------------------ ----------------
      ------- -------------------------------
    --------
      - -------------------------------
  --------
    ------ --------------
    -------- ------
    ------------
      ---------------------- ---------------
      ------------------------- ----------------
    ------
      - -------
    --------
      - -----------------------------
--------
  -------
  -------------

这个docker-compose.yml文件定义了两个服务:PostgreSQL和pgAdmin。其中,PostgreSQL服务使用了postgres镜像,并设置了一个名为POSTGRES_PASSWORD的环境变量指定密码,使用了一个卷pgdata来存储数据。pgAdmin服务使用了dpage/pgadmin4镜像,并设置了邮件和密码环境变量、映射到8080端口、使用一个卷pgadmin-data存储数据。

要创建并运行这个应用程序,请在包含docker-compose.yml文件的目录中运行以下命令:

这个命令将创建和启动两个服务,并在后台运行。

要停止和删除这个应用程序,可以运行以下命令:

发布到生产环境

在生产环境中,我们需要考虑高可用和故障恢复方案,以确保PostgreSQL数据库的稳定性和可靠性。下面让我们来看一下如何实现这些功能。

高可用

为了实现高可用性,我们可以使用Docker Swarm来管理PostgreSQL集群。Docker Swarm是一个集群管理工具,能够自动将容器部署到不同的节点上,并提供可靠性和弹性。

下面是一个简单的docker-compose.yml文件,用于在一个Swarm集群中创建一个高可用的PostgreSQL服务:

-- -------------------- ---- -------
-------- -----
---------
  -----------
    ------ --------------
    -------
      --------- -
      ----------
        ------------ ---------- -- -------
      ---------------
        ---------- ---
    ------------
      ------------------ ----------------
      ------- -------------------------------
    --------
      - -------------------------------
    ------
      - ---------
--------
  -------

这个docker-compose.yml文件创建了一个名为postgresql的服务,在Swarm集群中部署了3个副本,使用了环境变量指定密码、使用了一个卷pgdata来存储数据、映射到5432端口。

要在Swarm集群中启动这个服务,请运行以下命令:

这个命令将在Swarm集群中启动一个名为postgresql的服务,并将其部署到3个工作节点上。

故障恢复

为了实现故障恢复功能,我们可以使用Docker Swarm的服务发现机制来自动替换失效的容器。当容器发生故障时,Docker Swarm将自动将其替换为一个新的容器,并在日志中产生相应的消息。

下面是一个简单的docker-compose.yml文件,用于在一个Swarm集群中启用故障恢复功能:

-- -------------------- ---- -------
-------- -----
---------
  -----------
    ------ --------------
    -------
      --------- -
      ----------
        ------------ ---------- -- -------
      ---------------
        ---------- ---
        ------ --
        ------------- -
        ------- ----
    ------------
      ------------------ ----------------
      ------- -------------------------------
    --------
      - -------------------------------
    ------
      - ---------
--------
  -------

这个docker-compose.yml文件创建了一个名为postgresql的服务,启用了Swarm集群中的故障恢复功能,设置了重试策略,指定了最多尝试3次,每120秒进行一次尝试,等待5秒钟后再尝试。

总结

本文介绍了如何使用Docker部署和管理PostgreSQL,以及如何在生产环境中实现高可用和故障恢复功能。通过Docker和Docker Compose,创建和管理PostgreSQL容器变得轻松简单,同时使用Docker Swarm集群,使PostgreSQL更加可靠、弹性和高质量。

示例代码

Dockerfile

docker-compose.yml

-- -------------------- ---- -------
-------- -----
---------
  -----------
    ------ --------
    -------
      --------- -
      ----------
        ------------ ---------- -- -------
      ---------------
        ---------- ---
    ------------
      ------------------ ----------------
      ------- -------------------------------
    --------
      - -------------------------------
    ------
      - ---------
--------
  -------

Docker Swarm

启动一个Swarm集群

在Swarm集群中部署一个服务

列出所有Swarm节点

列出所有Swarm服务

列出特定服务的信息

列出Swarm服务的日志

删除Swarm服务

离开Swarm集群

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d4af94b5eee0b525c81b4a

纠错
反馈