在如今的前端开发中,Docker 已经成为了构建、打包和运行应用程序的主要工具。作为一种轻量级的容器技术,Docker 可以在不同的操作系统中运行应用程序,而且非常容易扩展、维护和部署。
同时,PostgreSQL 作为开源数据库的代表,也越来越受到前端开发人员的关注和使用。它提供了高级的 SQL 数据库功能和可靠的数据持久性,帮助开发人员轻松管理和处理大量数据。那么在 Docker 容器中使用 PostgreSQL 的最佳实践是什么呢?接下来我们将详细介绍一下。
Docker 中的 PostgreSQL
在 Docker 中运行 PostgreSQL,需要使用 PostgreSQL 官方提供的镜像。这个镜像包含了所有操作系统组件、PostgreSQL 二进制文件和其他必要的依赖项。要使用此镜像,请在 Dockerfile 中添加以下代码:
FROM postgres:12 ENV POSTGRES_USER docker ENV POSTGRES_PASSWORD docker ENV POSTGRES_DB pgdb COPY create_tables.sql /docker-entrypoint-initdb.d/
其中的 FROM postgres:12
表示使用的是 PostgreSQL 12 版本的官方镜像,在此基础上添加一些配置。ENV POSTGRES_USER docker
、ENV POSTGRES_PASSWORD docker
、ENV 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 数据库:
docker exec -it <CONTAINER_ID> psql -U docker pgdb
其中,<CONTAINER_ID>
是您已启动的 Docker 容器的 ID。
此时,您已经进入了 Docker 容器中的 PostgreSQL 数据库,可以使用 SQL 命令与其交互(如创建表、插入数据等)。
最佳实践
接下来,我们将介绍一些在 Docker 容器中使用 PostgreSQL 的最佳实践。
使用卷映射
为避免关闭或删除容器时数据丢失,您应该使用卷映射将数据保存在本地磁盘上。这样,即使容器被删除或重启,数据仍然可以恢复。值得注意的是,当您创建新的卷映射时,您需要在容器中重新初始化数据目录。可以使用以下命令将卷映射绑定到数据目录:
docker run -d \ --name postgres \ -v /path/to/local/directory:/var/lib/postgresql/data \ postgres:12
禁用 TCP/IP 连接
默认情况下,PostgreSQL 允许 TCP/IP 连接,这会增加网络攻击的风险。为了避免这种情况,最好禁用 TCP/IP 连接,只允许本地主机访问。您可以使用 docker-compose.yml
文件中的以下配置项实现这一点:
services: postgres: ... ports: - "127.0.0.1:5432:5432"
配置适当的用户权限
为了确保数据的安全性,您应该适当配置 PostgreSQL 用户的权限。能够操作数据库服务器的用户应该具备最小权限。同时,您应该恰当配置域名、IP 和用户名的访问权限,只让受信任的设备访问数据库。
以下示例代码展示了如何通过 SQL 命令为用户分配角色和权限:
-- Create a new role called 'webapp' CREATE ROLE webapp LOGIN PASSWORD 'password'; -- Create a new database called 'webapp' CREATE DATABASE webapp OWNER webapp; -- Grant permissions on 'webapp' to 'webapp' role GRANT ALL PRIVILEGES ON DATABASE webapp TO webapp;
在这个例子中,我们创建了一个名为 webapp
的新角色,分配了一个密码,分配了webapp
的所有权,并将所有权限分配给了此角色。
结论
随着前端开发的不断发展,Docker 容器和 PostgreSQL 数据库的使用也越来越普遍。在 Docker 容器中使用 PostgreSQL 的最佳实践是使用卷映射、禁用 TCP/IP 连接和适当配置用户权限。通过这些措施,您可以将 PostgreSQL 数据库保护好并保证数据的安全性和完整性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67527a898bd460d3ad94b6d3