如何使用 Docker 运行 PostgreSQL 数据库?

举报
wljslmz 发表于 2022/12/21 16:28:18 2022/12/21
【摘要】 使用 docker 运行 PostgreSQL 对于测试目的非常有用,你可以在任何地方运行它,您可以创建任何测试数据,使用它然后在测试完成后销毁它,它使集成测试和自动化测试变得容易。 如何使用 Docker 运行 PostgreSQL要使用 Docker 运行 Postgres,我们可以使用postgres Docker 官方镜像。我们可以使用这个命令来运行它。docker run -d \...

使用 docker 运行 PostgreSQL 对于测试目的非常有用,你可以在任何地方运行它,您可以创建任何测试数据,使用它然后在测试完成后销毁它,它使集成测试和自动化测试变得容易。

如何使用 Docker 运行 PostgreSQL

要使用 Docker 运行 Postgres,我们可以使用postgres Docker 官方镜像。我们可以使用这个命令来运行它。

docker run -d \
    -e POSTGRES_PASSWORD=mypassword \
    -e POSTGRES_USER=myuser \
    -p 5432:5432 \
    --name mypostgres postgres 
  • 参数POSTGRES_PASSWORD是必需的,POSTGRES_USER它在参数中定义用户的密码。
  • 参数POSTGRES_USER是可选的,如果未定义,postgres将使用默认用户,可以使用用户名和密码访问数据库。
  • 参数-p 5432:5432是将容器5432端口发布到宿主机5432端口,这是Postgres的默认端口。

现在,您的 Postgres 应该已经在 docker 中运行了。

要查看它,您可以使用命令docker psdocker container ls

可以使用 psql 访问数据库psql -h localhost -p 5432 -U myuser。创建的数据库是空的,如果想在容器中初始化数据库,可以将SQL文件放在/docker-entrypoint-initdb.d/Docker镜像的目录下。

运行数据初始化

目录中的文件/docker-entrypoint-initdb.d/将在容器启动时执行,文件可以是*.sql*.sql.gz*.sh

我们将使用下面的 SQL 来初始化我们的数据库,将 SQL 保存为目录中的文件,然后将文件所在的目录绑定到/docker-entrypoint-initdb.d/容器中的目录。

CREATE DATABASE mydb;

\c mydb;

CREATE TABLE city (
  id serial PRIMARY KEY,
  name VARCHAR
);

INSERT INTO city (name) VALUES ('Jakarta');
INSERT INTO city (name) VALUES ('Bandung');
INSERT INTO city (name) VALUES ('Bandar Lampung');

SQL是创建一个数据库,连接到它,创建一个表,然后向表中插入一些数据。

在运行容器时,我们添加-v参数绑定初始化目录:

docker run -d \
    -e POSTGRES_PASSWORD=mypassword \
    -e POSTGRES_USER=myuser \
    -p 5432:5432 \
    -v /your/directory/initdb:/docker-entrypoint-initdb.d \
    --name mypostgres postgres 

这个将源目录调整为自己的源路径就好。

现在因为我们已经在 PostgreSQL 容器中创建了一个数据库,所以我们可以直接连接到数据库。

psql -h localhost -p 5432 -U myuser mydb

选择数据。

我们可以看到数据已经被初始化了。

持久化数据

容器移除后,Docker 中 PostgreSQL 中的数据就没有了,但是如果你想持久化数据,我们可以创建一个 docker volume 并将它绑定到/var/lib/postgresql/data目录。

使用以下命令创建 docker 卷:

docker volume create postgresdata

我们可以看到使用命令创建的卷docker volume ls

我们需要绑定它以使 PostgreSQL 数据持久化。

docker run -d \
    -e POSTGRES_PASSWORD=mypassword \
    -e POSTGRES_USER=myuser \
    -p 5432:5432 \
    -v postgresdata:/var/lib/postgresql/data \
    -v ${PWD}/initdb:/docker-entrypoint-initdb.d \
    --name mypostgres postgres 

修改数据,然后删除容器并再次运行,这里看到数据已经持久化了。

结论

我们可以使用 Docker 轻松运行 PostgreSQL,对开发和测试很有帮助,我们可以创建脚本来初始化我们的数据,如果需要,我们还可以持久化 PostgreSQL 的数据。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。