Docker 容器中使用 PostgreSQL 的最佳实践

阅读时长 5 分钟读完

在如今的前端开发中,Docker 已经成为了构建、打包和运行应用程序的主要工具。作为一种轻量级的容器技术,Docker 可以在不同的操作系统中运行应用程序,而且非常容易扩展、维护和部署。

同时,PostgreSQL 作为开源数据库的代表,也越来越受到前端开发人员的关注和使用。它提供了高级的 SQL 数据库功能和可靠的数据持久性,帮助开发人员轻松管理和处理大量数据。那么在 Docker 容器中使用 PostgreSQL 的最佳实践是什么呢?接下来我们将详细介绍一下。

Docker 中的 PostgreSQL

在 Docker 中运行 PostgreSQL,需要使用 PostgreSQL 官方提供的镜像。这个镜像包含了所有操作系统组件、PostgreSQL 二进制文件和其他必要的依赖项。要使用此镜像,请在 Dockerfile 中添加以下代码:

其中的 FROM postgres:12 表示使用的是 PostgreSQL 12 版本的官方镜像,在此基础上添加一些配置。ENV POSTGRES_USER dockerENV POSTGRES_PASSWORD dockerENV POSTGRES_DB pgdb 则分别表示数据库的用户、密码和所使用的数据库名称。

最后一行 COPY create_tables.sql /docker-entrypoint-initdb.d/ 表示将代码仓库中的 create_tables.sql 文件拷贝到容器中的 /docker-entrypoint-initdb.d/ 目录下,这个目录会在容器启动时自动执行 SQL 脚本,因此该脚本用于创建所需的表和设置数据。

使用 Docker Compose 启动容器

如果您使用 Docker Compose,可以使用以下代码配置一个简单的 Docker Compose 版本 2 文件。这个文件将创建一个名为postgres的容器,并将端口 5432 映射到本地主机上的相同端口。这里还包括了其他一些配置选项,如所使用的数据库名称和 PostgreSQL 的用户和密码。

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

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

在容器中管理 PostgreSQL

一旦您的容器启动,就可以使用以下命令将其连接到容器中运行的 PostgreSQL 数据库:

其中,<CONTAINER_ID> 是您已启动的 Docker 容器的 ID。

此时,您已经进入了 Docker 容器中的 PostgreSQL 数据库,可以使用 SQL 命令与其交互(如创建表、插入数据等)。

最佳实践

接下来,我们将介绍一些在 Docker 容器中使用 PostgreSQL 的最佳实践。

使用卷映射

为避免关闭或删除容器时数据丢失,您应该使用卷映射将数据保存在本地磁盘上。这样,即使容器被删除或重启,数据仍然可以恢复。值得注意的是,当您创建新的卷映射时,您需要在容器中重新初始化数据目录。可以使用以下命令将卷映射绑定到数据目录:

禁用 TCP/IP 连接

默认情况下,PostgreSQL 允许 TCP/IP 连接,这会增加网络攻击的风险。为了避免这种情况,最好禁用 TCP/IP 连接,只允许本地主机访问。您可以使用 docker-compose.yml 文件中的以下配置项实现这一点:

配置适当的用户权限

为了确保数据的安全性,您应该适当配置 PostgreSQL 用户的权限。能够操作数据库服务器的用户应该具备最小权限。同时,您应该恰当配置域名、IP 和用户名的访问权限,只让受信任的设备访问数据库。

以下示例代码展示了如何通过 SQL 命令为用户分配角色和权限:

在这个例子中,我们创建了一个名为 webapp 的新角色,分配了一个密码,分配了webapp 的所有权,并将所有权限分配给了此角色。

结论

随着前端开发的不断发展,Docker 容器和 PostgreSQL 数据库的使用也越来越普遍。在 Docker 容器中使用 PostgreSQL 的最佳实践是使用卷映射、禁用 TCP/IP 连接和适当配置用户权限。通过这些措施,您可以将 PostgreSQL 数据库保护好并保证数据的安全性和完整性。

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

纠错
反馈