Appearance
部署 MongoDB
快速启动
bash
docker run -d \
--name mongodb \
--restart unless-stopped \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-p 27017:27017 \
-v mongo-data:/data/db \
mongo:7.0环境变量
| 变量 | 说明 |
|---|---|
MONGO_INITDB_ROOT_USERNAME | 管理员用户名 |
MONGO_INITDB_ROOT_PASSWORD | 管理员密码 |
MONGO_INITDB_DATABASE | 初始化数据库名 |
连接 MongoDB
bash
# 进入容器
docker exec -it mongodb mongosh \
-u admin -p secret \
--authenticationDatabase admin
# 常用操作
test> show dbs
test> use mydb
mydb> db.createCollection("users")
mydb> db.users.insertOne({name: "张三", age: 25})
mydb> db.users.find()
mydb> show collections初始化脚本
bash
mkdir -p ./mongo-init
cat > ./mongo-init/init.js <<'EOF'
// 切换到 myapp 数据库
db = db.getSiblingDB('myapp');
// 创建应用用户
db.createUser({
user: 'appuser',
pwd: 'apppassword',
roles: [{ role: 'readWrite', db: 'myapp' }]
});
// 创建初始集合和索引
db.createCollection('users');
db.users.createIndex({ email: 1 }, { unique: true });
db.users.createIndex({ createdAt: -1 });
EOF
docker run -d \
--name mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-e MONGO_INITDB_DATABASE=myapp \
-v mongo-data:/data/db \
-v $(pwd)/mongo-init:/docker-entrypoint-initdb.d:ro \
mongo:7.0自定义配置
bash
cat > ./mongod.conf <<'EOF'
storage:
dbPath: /data/db
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled
operationProfiling:
slowOpThresholdMs: 100
mode: slowOp
EOF
docker run -d \
--name mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-v mongo-data:/data/db \
-v $(pwd)/mongod.conf:/etc/mongod.conf:ro \
mongo:7.0 \
mongod --config /etc/mongod.conf备份与恢复
bash
# 备份整个数据库
docker exec mongodb mongodump \
-u admin -p secret \
--authenticationDatabase admin \
--out /backup
docker cp mongodb:/backup ./mongo-backup
# 备份指定数据库
docker exec mongodb mongodump \
-u admin -p secret \
--authenticationDatabase admin \
--db myapp \
--out /backup
# 恢复
docker cp ./mongo-backup mongodb:/backup
docker exec mongodb mongorestore \
-u admin -p secret \
--authenticationDatabase admin \
/backupDocker Compose
yaml
services:
mongodb:
image: mongo:7.0
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}
MONGO_INITDB_DATABASE: ${MONGO_DATABASE:-myapp}
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db
- ./mongo-init:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mongo-data: