使用Docker部署MongoDB

使用Docker部署MongoDB

使用Docker部署MongoDB是一种快速、便捷的方式,以下是详细步骤:

1. 基本部署

拉取MongoDB镜像

bash 复制代码
docker pull mongo:latest

运行MongoDB容器(最简单方式)

bash 复制代码
docker run --name mongodb -d -p 27017:27017 mongo

2. 带持久化存储的部署

bash 复制代码
docker run --name mongodb \
  -v /path/on/host:/data/db \
  -d -p 27017:27017 \
  mongo

3. 带认证的部署

首次运行(无认证)创建管理员用户

bash 复制代码
docker run --name mongodb \
  -d -p 27017:27017 \
  mongo --auth

进入容器创建用户

bash 复制代码
docker exec -it mongodb mongosh admin

# 在MongoDB shell中创建用户
db.createUser({ 
  user: 'admin', 
  pwd: 'yourpassword', 
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] 
})

带认证的完整部署命令

bash 复制代码
docker run --name mongodb \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=yourpassword \
  -d -p 27017:27017 \
  mongo --auth

4. 使用Docker Compose部署

创建docker-compose.yml文件:

yaml 复制代码
version: '3.8'

services:
  mongodb:
    image: mongo:latest
    container_name: mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=yourpassword
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data:/data/db
    restart: unless-stopped

volumes:
  mongodb_data:

然后运行:

bash 复制代码
docker-compose up -d

5. 高级配置

自定义配置文件

bash 复制代码
# 创建配置文件目录
mkdir -p /path/to/mongodb/config

# 创建配置文件
echo "storage:
  journal:
    enabled: true
security:
  authorization: enabled" > /path/to/mongodb/config/mongod.conf

# 运行容器
docker run --name mongodb \
  -v /path/to/mongodb/config:/etc/mongo \
  -v /path/to/mongodb/data:/data/db \
  -d -p 27017:27017 \
  mongo --config /etc/mongo/mongod.conf

副本集部署(开发环境)

bash 复制代码
# 启动三个MongoDB实例
docker run --name mongo1 -d -p 27017:27017 mongo --replSet rs0 --bind_ip_all
docker run --name mongo2 -d -p 27018:27017 mongo --replSet rs0 --bind_ip_all
docker run --name mongo3 -d -p 27019:27017 mongo --replSet rs0 --bind_ip_all

# 配置副本集
docker exec -it mongo1 mongosh --eval "rs.initiate({
  _id: 'rs0',
  members: [
    {_id: 0, host: 'mongo1:27017'},
    {_id: 1, host: 'mongo2:27017'},
    {_id: 2, host: 'mongo3:27017'}
  ]
})"

6. 常用管理命令

查看运行中的容器

bash 复制代码
docker ps

查看MongoDB日志

bash 复制代码
docker logs mongodb

进入MongoDB shell

bash 复制代码
docker exec -it mongodb mongosh -u admin -p yourpassword

停止和启动容器

bash 复制代码
docker stop mongodb
docker start mongodb

删除容器

bash 复制代码
docker rm -f mongodb

7. 安全建议

  1. 生产环境务必启用认证

  2. 不要将MongoDB直接暴露在公网上

  3. 定期备份数据

  4. 考虑使用网络隔离

    bash 复制代码
    docker network create mongo-network
    docker run --name mongodb --network mongo-network -d mongo
  5. 限制资源使用

    bash 复制代码
    docker run --name mongodb --memory="2g" --cpus="1.0" -d mongo

通过Docker部署MongoDB可以快速搭建开发、测试环境,生产环境建议考虑更全面的配置和监控方案。

相关推荐
wz975421 小时前
Docker 从 systemd 托管容器、overlay2 存储驱动到 Compose 多容器实战
spring cloud·docker·eureka
新*1 天前
ES 7.17 三节点 Docker 集群接入 IK 自定义词典:一次从丢插件到热更新的完整排障
运维·elasticsearch·docker·中文分词·ik分词
小白的码BUG之路1 天前
Jenkins -- gitee+docker+harbor+k8s 部署项目
docker·gitee·jenkins
AlfredZhao1 天前
Docker Compose 平滑切换环境变量文件,容器配置不残留
docker
duansamve2 天前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
我不会起名字3222 天前
seq 空洞排查:Mongo 的 51 只是预留上界,Redis CURR 才是已消耗边界
redis·后端·mongodb·go·即时通讯·im·故障排查
mengge.cloud2 天前
prometheus+k8s+弹性伸缩,综合项目
云原生·容器·kubernetes·prometheus
xbzb2 天前
从零容器化部署 ECShop:Harbor 私有仓库 + 自定义 PHP 镜像 + LNMP 三容器
容器·php·harbor·镜像·仓库·ecshop
那明眸似水2 天前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
腾飞开源2 天前
03_Kubernetes 核心概念拆解:从 Spec/Status 收敛到工作负载控制器的设计逻辑
云原生·容器·kubernetes