1. yum方式安装
1、添加一个yum源
创建一个 /etc/yum.repos.d/mongodb-org-5.0.repo 文件
[mongodb-org-5.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
2、安装MongoDB包
sudo yum install -y mongodb-org
默认配置文件:/etc/mongod.conf
默认数据文件目录:/var/lib/mongo
默认日志文件目录:/var/log/mongodb
3、可以自定义配置文件,更改某些设置
比如,指定新的数据存储目录(例如:/some/data/directory)或者 指定新的日志文件路径(例如:/some/log/directory/mongod.log)
最后,一定要确保运行MongoDB的用户有权限访问这些目录。假设我们新创建了一个用户叫zhangsan,我们打算用zhangsan这个用户来运行MongoDB,那么必须确保zhangsan可以访问/some/data/directory和/some/log/directory/mongod.log
于是,可以这样操作
sudo chown -R zhangsan:zhangsan <directory> mongod --config /etc/mongod.conf
PS:如果更改运行 MongoDB 进程的用户,则必须授予新用户访问这些目录的权限。
4、启动MongoDB
sudo systemctl start mongod
5、查看MongoDB运行状态
sudo systemctl status mongod
6、停止MongoDB
sudo systemctl stop mongod
7、重启MongoDB
sudo systemctl restart mongod
8、使用MongoDB
mongosh
在与 mongod 相同的主机上启动 mongosh 会话。可以在不带任何参数的情况下运行 mongosh,这样的话就会连接本地 localhost 上运行的 mongod,默认端口为 27017。
9、help
10、卸载MongoDB
# 停止服务 sudo systemctl stop mongod # 删除安装包 sudo yum erase $(rpm -qa | grep mongodb-org) # 删除数据库和日志文件 sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongo
11、快速开始
MongoDB 将文档存储在集合中。 集合类似于关系数据库中的表。 如果集合不存在,MongoDB 会在首次存储该集合的数据时创建该集合。
12、包名称和描述
13、关闭防火墙
systemctl stop|start|status firewalld
2. docker方式安装
下载镜像
docker pull mongo
指定版本运行容器
1、启动一个 mongo server 实例
docker run --name some-mongo -d mongo:tag
2、从另一个 Docker 容器连接到 MongoDB
以下示例启动另一个 MongoDB 容器实例,并针对上面示例中的原始 MongoDB 容器运行 mongo 命令行客户端,从而允许您对数据库实例执行 MongoDB 语句:
docker run -it --network some-network --rm mongo mongo --host some-mongo test
(PS:这里解释一下,这就相当于是在B容器中远程连接到A容器,相当于是本地mongo客户端连接到远程mongo服务器。由于现在mongo是运行在docker容器里的,所以我们可以把运行mongo server的容器理解成一台机器A,为了能够在另外一台机器B中连接到A,需要B上至少安装了mongo shell,这就是mongo client 连接到远程 mongo server)
3、容器shell访问并查看MongoDB日志
docker exec 命令允许你在 Docker 容器内运行命令。 以下命令行将为你提供 mongo 容器内的 bash shell:
docker exec -it some-mongo bash
MongoDB 服务器日志可通过 Docker 的容器日志获得:
docker logs some-mongo
4、帮助
查看帮助,可以知道mongo容器运行时可以带哪些参数
docker run -it --rm mongo --help
5、设置WiredTiger缓存大小限制
docker run --name some-mongo -d mongo --wiredTigerCacheSizeGB 1.5
6、用一个自定义的MongoDB配置文件
mongod 默认不读取配置文件,所以需要通过 --config 选项来指定配置文件的路径。 通过从 mongo 创建自定义 Dockerfile 或将其从主机挂载到容器来创建自定义配置文件并将其放入容器中。
例如,假设/my/custom/mongod.conf是自定义的配置文件,那么在启动MongoDB容器的时候可以这样:
docker run --name some-mongo -v /my/custom:/etc/mongo -d mongo --config /etc/mongo/mongod.conf
默认的配置文件(/etc/mongod.conf)如下:
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /var/lib/mongo journal: enabled: true # engine: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo # network interfaces net: port: 27017 bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options #auditLog: #snmp:
7、环境变量
启动 mongo 镜像时,可以通过在 docker run 命令行中传递一个或多个环境变量来调整 MongoDB 实例的初始化。
MONGO_INITDB_ROOT_USERNAME, MONGO_INITDB_ROOT_PASSWORD 这两个变量一起使用,创建一个新用户并设置该用户的密码。 该用户是在管理员(admin)身份验证数据库中创建的,并被赋予 root 角色,这是一个“superuser(超级用户)”角色。
下面是一个例子,使用这两个变量创建一个MongoDB实例,然后使用 mongo cli 连接到admin身份认证数据库。
首先,启动容器,创建MongoDB实例
docker run -d --network some-network --name some-mongo \ -e MONGO_INITDB_ROOT_USERNAME=mongoadmin \ -e MONGO_INITDB_ROOT_PASSWORD=secret \ mongo
连接到前面创建的mongo server实例容器
docker run -it --rm --network some-network mongo \ mongo --host some-mongo \ -u mongoadmin \ -p secret \ --authenticationDatabase admin \ some-db
(PS:命令行中的mongo是镜像的名字,而 mongod 是 MongoDB 系统的主要守护进程)
要创建用户,这两个变量都是必需的。 如果二者都存在,那么 MongoDB 将启用身份验证(mongod --auth)
MongoDB 中的身份验证相当复杂,因此更复杂的用户设置通过 /docker-entrypoint-initdb.d/ 显式留给用户自己设置
MONGO_INITDB_DATABASE 这个变量允许您指定用于/docker-entrypoint-initdb.d/*.js中创建脚本的数据库名称
MongoDB 设计的最基本的原则是:"create on first use" (第一次使用时创建)
作为通过环境变量传递敏感信息的替代方法,_FILE 可以附加到先前列出的环境变量中,从而导致初始化脚本从容器中存在的文件中加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 密钥存储中加载密码。当前,只支持MONGO_INITDB_ROOT_USERNAME 和 MONGO_INITDB_ROOT_PASSWORD 。
docker run --name some-mongo -e MONGO_INITDB_ROOT_PASSWORD_FILE=/run/secrets/mongo-root -d mongo
8、认证
MongoDB 中的身份验证相当复杂,参见:
mongod --auth
Security > Authentication
Security > Role-Based Access Control
Security > Role-Based Access Control > Built-In Roles
Security > Enable Auth (tutorial)
9、数据存储在哪里
有两种方法可以存储在 Docker 容器中运行的应用程序使用的数据。
方式一:让Docker使用自己的内部卷管理将数据库文件写入主机系统上的磁盘,从而管理数据库数据的存储。这是默认设置,对用户来说非常简单且相当透明。缺点是,对于直接运行在主机系统上的工具和应用程序(即外部容器)来说,可能很难找到这些文件。
方式二:在宿主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内部可见的目录。这会将数据库文件放置在主机系统上的已知位置,并使主机系统上的工具和应用程序可以轻松访问这些文件。 缺点是,用户需要确保目录存在,例如,主机系统上的目录权限和其他安全机制是正确设置的。
(PS:总结一下,两种方式,一种是放到容器内部,另一种是放到容器外部)
由docker自己管理这种默认行为就不在这里演示了,下面演示一下将容器外部的目录挂载到容器这种方式:
首先,在宿主机上创建一个目录,比如叫 /my/own/datadir
然后,在启动容器的时候使用 -v 选项挂载目录
docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo
这个命令中,-v /my/own/datadir:/data/db 将主机系统上的/my/own/datadir目录挂载到容器的/data/db。docker容器安装mongodb时,默认情况下MongoDB会将它的数据存放在/data/db目录中。
备忘录
docker network create my-network docker network ls docker run -d --network my-network --name my-mongo mongo docker run -it --rm --network my-network mongo mongo --host my-mongo test docker exec -it my-mongo bash
10、创建数据库转储(dump)
docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
11、备忘录
docker run --network some-network --name some-mongo -v /my/custom:/etc/mongo -p 27017:27017 -d mongo --config /etc/mongo/mongod.conf docker run --name some-mongo -p 27017:27017 -d mongo --auth docker exec -it some-mongo mongo admin > db.createUser({user:"root",pwd:"123456",roles:["root"]}) docker run -d --name some-mongo \ -e MONGO_INITDB_ROOT_USERNAME=admin \ -e MONGO_INITDB_ROOT_PASSWORD=123456 \ mongo docker exec -it some-mongo mongo
文档:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
https://registry.hub.docker.com/_/mongo
https://docs.docker.com/engine/reference/commandline/network/