如何在docker中部署mongo
mongo配置
# 拉库
docker pull mongo
# run
docker run -itd --name mongo -p 27017:27017 mongo --auth
# 进入mongo
docker exec -it mongo mongosh admin
# 创建一个用户
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 连接测试
db.auth('admin', '123456')
python远程连接mongo
# 引入库
from pymongo.mongo_client import MongoClient
# url组合
uri = "mongodb://admin:123456@127.0.0.1/?admin?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh"
client = MongoClient(uri)
# 连接测试, 返回successfully表示连接成功;
try:
client.admin.command('ping')
print("Pinged your deployment. You successfully connected to MongoDB!")
except Exception as e:
print(e)
简单的操作
docker exec -it mongo mongosh admin
# 查看用户
show user
# 查看数据库
show dbs
# 当前数据库
db
# 查看所有集合
show collections
创建mongo单副本集
Mongo单副本集创建方法
docker拉库
docker pull mongo
然后构建一个docker-compose的yaml
# 先cd到/path/to/host
openssl rand -base64 128 > keyFile
chmod 400 keyFile
chown 999 keyFile
# 其中volumes中映射一个keyFile跟一个db文件夹
version: '3'
services:
mongo:
network_mode: bridge
container_name: mongo
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: adminadminadmin
ports:
- 27017:27017
command: mongod --replSet rs0 --bind_ip_all --auth --keyFile /etc/mongo/keyFile --dbpath /data/db
volumes:
- /path/to/host/keyFile:/etc/mongo/keyFile
- /path/to/host/data:/data/db
执行构建
# 构建
docker-compose up -d
# 进入bash
docker exec -it mongo bash
# 进入sh
mongosh
# 切换用户
use admin
# 认证
db.auth('admin', 'adminadminadmin')
# 新建一个conf,替换ip部分。
conf = {_id : "rs0",members: [{ _id: 0, host: "<ip>:27017" },]}
# 构建
rs.initiate(conf)
# 查看状态
rs.status()
# 连接uri
uri = "mongodb://admin:adminadminadmin@<ip>:27017/?replicaSet=rs0"
mongo操作
新建用户
进入admin数据库
use amdin
创建用户
db.createUser({user:"xxx",pwd:"xxx",roles:["dbAdmin","readWrite"]})
删除用户
db.dropUser('xxx')
以xx用户登录
mongo -u root -p xxx
副本集方式1
参数
docker run --rm --network test-net --name mongo1 -d -v /data/mongo1/db:/data/db -p 27021:27017 mongo:latest --replSet replSet1
docker run --rm --network test-net --name mongo2 -d -v /data/mongo1/db:/data/db -p 27022:27017 mongo:latest --replSet replSet1
启用副本集
rs.initiate()
副本集添加新成员
rs.add('10.10.10.10:27018')
可以通过以下命令检查
rs.status()
副本集方式2
创建多个副本集
创建第1个
docker run -p 30001:27017 --name mongo1 mongo mongod --replSet my-mongo-set
创建第2个
docker run -p 30002:27017 --name mongo1 mongo mongod --replSet my-mongo-set
进入到其中一个
docker exec -it mongo1 mongo
配置文件
config = {"_id" : "my-mongo-set","members" : [{"_id" : 0,"host" : "10.10.10.10:27018"},{"_id" : 1,"host" : "10.10.10.203:27019"}]}
运行配置文件
rs.initiate(config)
可以通过以下命令检查
db.isMaster()
rs.status()
评论区