如何使用 Docker 运行 PostgreSQL 数据库?
使用 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 ps
或docker 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 的数据。
- 点赞
- 收藏
- 关注作者
评论(0)