原文:
www.kdnuggets.com/how-to-use-docker-volumes-for-persistent-data-storage
使用 Docker 时,你可以使用卷来持久保存数据,即使你停止或重启容器。我们将为 PostgreSQL 创建和使用 Docker 卷。
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT
要跟随本教程:
-
你应该在你的机器上安装了Docker
-
你应该对 Docker 命令和 PostgreSQL 感到熟悉
首先,我们从 DockerHub 拉取 PostgreSQL 镜像:
$ docker pull postgres
接下来,让我们创建一个 Docker 卷来存储数据。即使容器被移除,这个卷也会持久保存数据。
$ docker volume create pg_data
现在我们已经拉取了镜像并创建了卷,我们可以运行 PostgreSQL 容器,将创建的卷附加到它上面。
$ docker run -d \
--name my_postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-v pg_data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres
这个命令在分离模式下运行my_postgres
。使用 -v pg_data:/var/lib/postgresql/data 将pg_data
卷挂载到容器中的**/var/lib/postgresql/data**。并且使用**-p 5432:5432**将my_postgres
的 5432 端口映射到主机上的 5432 端口。
现在我们已经创建了卷,可以验证它是否正在使用。你可以检查卷并查看其内容。
$ docker volume inspect pgdata
运行此命令将显示有关卷的详细信息,包括其在主机系统上的挂载点。你可以导航到该目录并查看 PostgreSQL 数据文件。
[
{
"CreatedAt": "2024-08-07T15:53:23+05:30",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/pg_data/_data",
"Name": "pg_data",
"Options": null,
"Scope": "local"
}
]
连接到 Postgres 实例,创建数据库和表。
启动一个 psql 会话:
$ docker exec -it my_postgres psql -U postgres
创建一个新的数据库:
CREATE DATABASE mydb;
连接到新的数据库:
\c mydb
创建一个表并插入一些数据:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('Abby', '[email protected]'), ('Bob', '[email protected]');
运行一个示例查询:
SELECT * FROM users;
输出:
id | name | email
----+------+------------------
1 | Abby | abby@example.com
2 | Bob | bob@example.com
停止正在运行的容器并将其删除。我们这样做是为了测试即使容器被停止,数据是否仍然持久。
$ docker stop my_postgres
$ docker rm my_postgres
启动一个新的 PostgreSQL 容器,使用相同的卷以确保数据持久性。
$ docker run -d \
--name my_postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres
连接到 Postgres 实例并验证数据是否持久。
打开一个 psql 会话:
$ docker exec -it my_postgres psql -U postgres
连接到mydb
数据库:
\c mydb
验证users
表中的数据:
SELECT * FROM users;
你仍然应该看到输出:
id | name | email
----+------+------------------
1 | Abby | abby@example.com
2 | Bob | bob@example.com
我希望这个教程能帮助你理解如何使用卷来持久化 Docker 中的数据。
要了解更多信息,请阅读以下资源:
祝你探索愉快!
Bala Priya C**** 是来自印度的开发者和技术作家。她喜欢在数学、编程、数据科学和内容创作的交汇点上工作。她的兴趣和专业领域包括 DevOps、数据科学和自然语言处理。她喜欢阅读、写作、编码和喝咖啡!目前,她正在通过撰写教程、操作指南、观点文章等,学习并与开发者社区分享她的知识。Bala 还制作了引人入胜的资源概述和编码教程。