使用 Docker 部署维护 MongoDB 实例

Docker 是一个功能强大的开发平台,而 Docker 的优势很容易让 Web 开发人员所忽略。在专栏《面向WEB开发人员的Docker》中介绍了在 WEB 开发中可以提高效率的使用方式。容器可以在任何机器上运行,也可以在公共云或私有云中运行。由于 Docker 的轻量级运行时和独立运行进程的能力,多个容器可以在同一虚拟机或服务器上同时运行。

MongoDB 是一种 NoSQL 数据库服务,具有无缝性能和扩展选项,在基于 NODE.js 的全栈开发中经常使用的数据库类型之一。它使用类似 JSON 的存储模型,不需要预定义的数据库架构。在现实世界中,大多数数据都是非结构化的------它不遵循特定的模式。 NoSQL 数据库对于存储此类数据非常有用。只需输入数据,就会创建新字段。在缺少大量数据的情况下,还可以将字段留空。

MongoDB 可以在 Docker 容器中运行, Docker Hub 上有官方映像,其中包含用于开发环境的 MongoDB 社区版本。对于生产,可以使用 MongoDB 企业版自定义构建容器。

如果想在多台机器上使用 MongoDB 数据库,使用 Docker 容器托管 MongoDB 是一个很好的方法。这种方式可以轻松创建新的隔离实例。此外,在开发过程中,启动 Docker 实例比手动配置服务器更容易。如果正在开发多个应用程序,则可以使用 docker-compose.yaml 文件快速启动多个容器。

安装 Docker

要启动 MongoDB 之前先要确保安装好 Docker (安装文档),可以通过终端输入命令安装,也可以使用 Docker Desktop 以获得无缝体验。

启动 MongoDB

对于开发,最好连接到本地 Docker 容器内运行的 MongoDB 实例(而不是云托管实例)以节省资源。可以拉取最新的 MongoDB 镜像并在 Docker 容器中运行它。对于生产,应用程序可以使用 MongoDB AtlasMongoDB Enterprise Server 连接到云托管数据库。

在开发中,建议使用 Docker 在本地托管 MongoDB 实例。首先通过指定相应的标签来拉取所需 MongoDB 版本的镜像:

docker pull mongo:7.0

现在使用以下命令启动运行 MongoDB:

arduino 复制代码
docker run -d -p 27017:27017 --name test-mongo mongo:7.0

-d 标志意思是 Docker 容器作为后台进程运行,-p 标签表示容器绑定的端口号 27017,在程序中可以使用 localhost:27017 连接到 MongoDB。

如果需要更改端口号,可以将 -p 标志参数更改为 8000:27017 ,这样在程序中的连接地址为 localhost:8000。还可以使用 --port 标志来更改映射的端口号。使用自定义端口映射可以避免多版本冲突。

使用以下命令进入 MongoDB 容器中。

bash 复制代码
docker exec -it test-mongo bash

进入后输入命令 mongosh,可以看到如下效果:

show dbs 命令将显示所有现有数据库,如下所示。

关于 shell 中命令的详细信息,输入 help 命令可以看到所有的指令。

要检查容器日志,可以使用 docker logs 命令,后跟容器的名称或者ID:

使用 --follow 标志,容器日志将在终端上实时更新。

持久保存数据

在 Docker 中运行 MongoDB 时,如果按照上面的命令运行,数据库的数据将存储在容器中,一旦容器重启或者被删除数据就会丢失。通常使用卷 volume 来确保映射容器中的一些目录,默认情况下,MongoDB 镜像将其数据存储在容器中 /data/db 目录中。可以将卷映射到此位置以启用数据持久性。使用下面的命令将创建一个 test-mongo 容器,并在其上数据映射到目录 data-vol

javascript 复制代码
docker run -d \
    -p 27017:27017 \
    --name test-mongo \
    -v data-vol:/data/db \
    mongo:7.0

-v 标记就是用来映射容器路径,如果需要查看卷,可以使用 docker volume inspect 命令来执行此操作。也可以使用 docker volume ls 检查所有现有卷以显示哪些卷附加到哪些容器:

bash 复制代码
docker volume ls

配置 MongoDB

如果要更改默认的 MongoDB 配置,使用 --config 标志将位置传递到包含配置的文本文件,配置文件遵循YAML格式,命令如下:

bash 复制代码
docker run -d 
    --name test-mongo 
    -v mongo-data:/data/db 
    -v ./mongo.conf:/etc/mongo/mongo.conf
    mongo:7.0 --config /etc/mongo/mongo.conf

MongoDB 安全配置

需要确保数据库安全,向 MongoDB 容器添加身份验证,阻止未经授权的人员连接到服务器。通过在容器创建期间使用环境变量设置用户名和密码来添加数据库用户帐户。使用 -e 标志指定环境变量 MONGODB_INITDB_ROOT_USERNAMEMONGODB_INITDB_ROOT_PASSWORD

ini 复制代码
docker run -d 
    -p 27017:27017 
    --name test-mongo 
    -v mongo-data:/data/db 
    -e MONGODB_INITDB_ROOT_USERNAME=sample-db-user
    -e MONGODB_INITDB_ROOT_PASSWORD=sample-password 
    mongo:7.0

数据备份

在 Mongodb 中使用 mongodump 命令来备份 MongoDB 数据,可以导出所有数据到指定目录中。

mongodump -h dbhost -d dbname -o dbdirectory
  • -h:MongoDB 所在服务器地址,例如:127.0.0.1:27017
  • -d:需要备份的数据库实例名称,例如:admin
  • -o:备份的数据存放位置,该目录需要提前建立,在备份完成后,系统自动在 dump 目录下建立一个 admin 目录,这个目录里面存放该数据库实例的备份数据。

在这里进入容器,数据命令:

bash 复制代码
mongodump -h 127.0.0.1:27017 -d admin -o /data/dump/

数据还原

备份好了数据之后,需要用到备份数据,就要还原,在 Mongodb 中使用 mongorestore 命令来恢复备份的数据,命令语法如下:

mongorestore -h dbhost -d dbname dbdirectory
  • -h:MongoDB 所在服务器地址,例如:127.0.0.1:27017
  • -d:需要备份的数据库实例名称,例如:admin
  • --drop:恢复的时候,先删除当前数据,然后恢复备份的数据,需要慎用
  • dbdirectory:备份数据所在位置,如 data/dump/admin

同样这里进入容器,运行命令:

bash 复制代码
mongorestore -h 127.0.0.1:27017 -d admin /data/dump/admin

总结

在上面介绍了使用 Docker 托管 MongoDB 服务器,作为WEB开发人员,使用容器作为日常生活的一部分有很多优点。容器确保了跨操作系统的一致性,通过使用它们,可以确保整个团队的一致性。而部署容器相对容易,并可以确保生产环境和开发环境的一致性。

相关推荐
wusam5 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)
学习·docker·centos
知否技术7 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
wusam8 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
一直在进步的派大星8 小时前
Docker 从安装到实战
java·运维·docker·微服务·容器
攻城狮numberOne11 小时前
MongoDB集群模式详解及应用实战
数据库·mongodb
姜豆豆耶11 小时前
MongoDB-aggregate流式计算:带条件的关联查询使用案例分析
数据库·mongodb
DngYT11 小时前
MongoDB入门:安装及环境变量配置
数据库·mongodb
谢尔登11 小时前
【Node.js】worker_threads 多线程
node.js
技术钱13 小时前
docker简介
运维·docker·容器
roman_日积跬步-终至千里14 小时前
【docker】docker常见命令
运维·docker·容器