0
点赞
收藏
分享

微信扫一扫

docker mongodb 持久化

彭维盛 2023-07-21 阅读 76

Docker MongoDB 持久化

在使用 Docker 部署 MongoDB 数据库时,一个常见的问题是如何实现数据的持久化存储。默认情况下,Docker 容器中的数据是临时的,一旦容器被删除,数据也会丢失。在本文中,我们将介绍如何通过挂载数据卷的方式实现 MongoDB 数据的持久化存储。

创建一个 MongoDB 容器

首先,我们需要创建一个 MongoDB 容器。我们可以使用 Docker 官方提供的 MongoDB 镜像,并指定一个容器名称和端口号。运行以下命令创建一个名为 mongo-container 的 MongoDB 容器:

docker run -d -p 27017:27017 --name mongo-container mongo

上述命令会在后台运行一个 MongoDB 容器,并将主机的 27017 端口映射到容器的 27017 端口。这样我们就可以通过主机的 27017 端口连接到 MongoDB 服务了。

创建数据卷

接下来,我们需要创建一个数据卷,用于持久化存储 MongoDB 的数据。数据卷可以将主机上的一个目录或文件与容器内的一个目录或文件进行关联。这样,容器内的数据就可以在容器删除后仍然保留在主机上。

运行以下命令创建一个名为 mongo-data 的数据卷:

docker volume create mongo-data

上述命令会在 Docker 主机上创建一个名为 mongo-data 的数据卷。

挂载数据卷

现在,我们需要将数据卷挂载到 MongoDB 容器中。在运行 MongoDB 容器时,使用 -v 参数来指定数据卷的挂载路径。运行以下命令挂载 mongo-data 数据卷到 /data/db 目录:

docker run -d -p 27017:27017 --name mongo-container -v mongo-data:/data/db mongo

上述命令会将 mongo-data 数据卷挂载到 MongoDB 容器中的 /data/db 目录。

数据持久化测试

现在,我们可以测试数据的持久化存储功能了。首先,创建一个测试数据库和集合,并插入一些数据:

docker exec -it mongo-container mongo
> use testdb
> db.testcollection.insertOne({ name: 'John', age: 30 })
> db.testcollection.find()

上述命令会进入 MongoDB 容器内的 Shell,并在 testdb 数据库的 testcollection 集合中插入一条数据。然后,通过 find() 命令查找数据。

接下来,我们可以停止并删除 MongoDB 容器:

docker stop mongo-container
docker rm mongo-container

然后重新创建一个 MongoDB 容器,并查找之前插入的数据:

docker run -d -p 27017:27017 --name mongo-container -v mongo-data:/data/db mongo
docker exec -it mongo-container mongo
> use testdb
> db.testcollection.find()

如果之前插入的数据在重新创建的容器中能够找到,那么说明数据持久化成功。

总结

通过挂载数据卷的方式,我们可以实现 MongoDB 数据的持久化存储。首先,创建一个 MongoDB 容器,并将主机的端口映射到容器的端口。然后,创建一个数据卷并将其挂载到容器中的数据目录。最后,通过测试数据的插入和查找,验证数据的持久化存储功能。

希望本文对你理解 Docker MongoDB 持久化有所帮助!如有疑问,请随时留言。

代码示例:

创建 MongoDB 容器:

docker run -d -p 27017:27017 --name mongo-container mongo

创建数据卷:

docker volume create mongo-data

挂载数据卷:

docker run -d -p 27017:27017 --name mongo-container -v mongo-data:/data/db mongo

测试数据持久化:

docker exec -it mongo-container mongo
> use testdb
> db.testcollection.insertOne({ name: 'John', age: 30 })
> db.testcollection.find
举报

相关推荐

0 条评论