本地开发还用愁环境?Docker + MongoDB + Mongo Express,一条命令搞定整套数据库服务

你有没有遇到过这样的场景:要开发一个Node.js应用,需要用到MongoDB。你打开官网,找到下载链接,下载安装包,下一步下一步,配置环境变量,启动服务……折腾半小时,终于跑起来了。换台电脑,再来一遍。
烦不烦?
今天我们用Docker来彻底解决这个问题。一条命令,MongoDB就跑起来了;再一条命令,可视化管理界面也有了。换电脑?换系统?一样的命令,一样的体验。
一、我们要搭什么?
一个简单的Node.js后端应用,连接MongoDB数据库,再加一个Mongo Express做可视化管理界面。
架构很简单:
-
Node.js:跑在宿主机上(暂时不打成镜像)
-
MongoDB:跑在Docker容器里
-
Mongo Express:也跑在Docker容器里
两个容器需要能互相通信,并且Node.js要能访问MongoDB。
二、第一步:拉取镜像
先把需要的镜像拉下来:
docker pull mongo
docker pull mongo-express
MongoDB是数据库本体,Mongo Express是它的Web管理界面,类似phpMyAdmin之于MySQL。
三、第二步:创建Docker网络
两个容器需要互相通信。Docker的默认网络模式是bridge,但为了让它们能通过容器名互相访问,最好创建一个自定义网络:
docker network create mongo-network
查看一下:
docker network ls
你会看到新创建的mongo-network。
四、第三步:启动MongoDB容器
docker run -p 27017:27017 -d \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
--name mongodb \
--net mongo-network \
mongo
参数解释:
| 参数 | 作用 |
|---|---|
-p 27017:27017 |
把容器的27017端口映射到宿主机,供Node.js访问 |
-d |
后台运行 |
-e |
设置环境变量,初始化root账号密码 |
--name mongodb |
给容器起个名字,方便其他容器通过这个名字访问 |
--net mongo-network |
把容器加入我们创建的网络 |
启动后,用docker logs mongodb看一下日志,看到“waiting for connections”就说明好了。
五、第四步:启动Mongo Express容器
docker run -p 8081:8081 -d \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=password \
-e ME_CONFIG_MONGODB_SERVER=mongodb \
--name mongo-express \
--net mongo-network \
mongo-express
注意这一行:
-e ME_CONFIG_MONGODB_SERVER=mongodb
这里填的是MongoDB的容器名,不是IP,也不是localhost。因为两个容器在同一个自定义网络里,Docker会自动做DNS解析,让它们能通过容器名找到对方。
这是容器互联最关键的一点,也是初学者最容易踩的坑。
启动后,访问http://localhost:8081,就能看到Mongo Express的界面了。用admin/password登录,创建一个叫user-account的数据库。
六、第五步:Node.js应用连接数据库
在Node.js代码里,连接MongoDB的URI是:
mongodb://admin:password@localhost:27017
因为Node.js跑在宿主机上,不是容器里,所以用localhost加映射出来的端口27017。
配置好连接信息,启动Node.js应用。修改用户信息,保存,刷新页面——数据还在。去Mongo Express里刷新,也能看到数据已经写进去了。
大功告成。
七、如果出问题了怎么办?
用docker logs查看日志。
比如查看MongoDB的日志:
docker logs mongodb
实时跟踪日志:
docker logs -f mongodb
这样你就能看到连接有没有成功,认证有没有通过,错误在哪里。
写在最后
这个例子虽然简单,但它展示了一个非常实用的本地开发模式:
-
依赖服务(数据库、缓存、消息队列)用Docker跑
-
主应用代码跑在宿主机上,方便调试
-
所有环境配置一条命令搞定,换电脑也不怕
更多推荐

所有评论(0)