NoSQL数据库怎么用Docker一键跑起来?实战MongoDB和Redis容器化部署

现在搭个测试环境,谁还手动装 Monref="/tag/2029/" style="color:#3D6345;font-weight:bold;">goDB 或 Redis 啊?下载、解压、改配置、加环境变量……光是配端口冲突就能折腾半小时。不如直接上 Docker,几条命令,NoSQL 数据秒级就位,开发调试、本地联调、CI/CD 流水线全都能接得上。

为什么 NoSQL 容器这么香?

不是所有数据库都适合“开箱即用”,但 NoSQL 类(比如 MongoDB、Redis、Cassandra)天生轻量、无状态、配置集中,特别适配容器场景。你不用管它装在哪台机器、依赖什么版本的 glibc,只关心:数据目录挂对没、端口映射通不通、要不要持久化。连运维同学都夸你这次部署“没留后门”。

MongoDB 容器化三步走

以官方镜像 mongo:6.0 为例,本地快速起一个带 auth 的单节点:

docker run -d \
  --name my-mongo \
  -p 27017:27017 \
  -v /mydata/mongo:/data/db \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  --restart=always \
  mongo:6.0

跑起来之后,用 Studio 3T 或 mongosh 连 mongodb://admin:123456@localhost:27017 就能直接操作。注意 /mydata/mongo 是你本机的真实路径,确保有读写权限,否则容器一启动就退出。

Redis 更简单,甚至可以不挂卷

如果你只是临时缓存或跑个 demo,Redis 根本不用持久化:

docker run -d \
  --name my-redis \
  -p 6379:6379 \
  -e REDIS_PASSWORD=pass123 \
  --restart=always \
  redis:7-alpine \
  redis-server --requirepass $REDIS_PASSWORD

连上去试试:redis-cli -h 127.0.0.1 -p 6379 -a pass123,输入 set hello world 回车,立马返回 OK —— 没有比这更顺滑的体验了。

进阶:用 docker-compose 编排多个 NoSQL 服务

项目里同时要 MongoDB + Redis?写个 docker-compose.yml 一起拉起来:

version: '3.8'
services:
  mongodb:
    image: mongo:6.0
    ports: ["27017:27017"]
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin123
    volumes:
      - ./mongo-data:/data/db

  redis:
    image: redis:7-alpine
    ports: ["6379:6379"]
    command: redis-server --requirepass redis123
    volumes:
      - ./redis-data:/data

保存后终端执行 docker-compose up -d,两个服务自动启动、网络互通,应用里直接用 mongodb://admin:admin123@mongodb:27017redis://:redis123@redis:6379 就能访问,连 hosts 都不用改。

小提醒:别踩这些坑

挂载目录权限不对?Ubuntu 上常因 SELinux 或 rootless Docker 导致容器无法写入 /data/db,加一句 chown -R 999:999 ./mongo-data(MongoDB 官方镜像默认用 UID 999 运行);
Redis 启动报错 “Can't open the log file”?删掉 command 行,改用 redis.conf 挂载方式更稳;
本地开发频繁重启?加上 --rm 参数,停掉就自动清理容器,避免一堆 Exited (137) 堆在 docker ps -a 里。