第一步到第四步都是在创建MongoDB和准备数据,有MongoDB数据的直接跳到第五步
第一步 用docker创建MongoDB环境和mongo-express
借鉴docker hub官网说明:Docker Official Images - mongo
安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose.yml文件内容:
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo:4.4.6
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express:0.54.0
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
创建MongoDB的docker环境命令:
docker-compose -f docker-compose.yml up
查看创建好的docker 容器
docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e9f0a7ed7d6 mongo-express "tini -- /docker-ent…" 5 hours ago Up 36 minutes 0.0.0.0:8081->8081/tcp flask-webcast-master_mongo-express_1
d492f64255b9 mongo "docker-entrypoint.s…" 5 hours ago Up 36 minutes 0.0.0.0:27017->27017/tcp flask-webcast-master_mongo_1
通过mongo-express访问MongDB
https://localhost:8081
image.png
第二步 创建一个新的数据库
进入flask-webcast-master_mongo_1容器进行操作
进入容器:
docker exec -it flask-webcast-master_mongo_1 bash
连接DB:
mongo --host localhost --port 27017 -u root -p example
显示已有DB:
show dbs
创建名为test的新DB:
use test
第三步 为新DB创建用户
use test
db.createUser({user:'yuange',pwd:'1433223',roles:[{role:"readWrite",db:"test"}]})
第四步 新加一条数据。newclo 是自定义的集合的名字,不存在的话会自动创建
db.newclo.insert({desc:"Hello Mongo!"})
第二步到第四步的命令输出大概是这样的:
$ docker exec -it flask-webcast-master_mongo_1 bash
root@d492f64255b9:/# mongo --host localhost --port 27017 -u root -p example
MongoDB shell version v4.2.0
connecting to: mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f066079c-b377-4dc7-aefd-e169c3c70e30") }
MongoDB server version: 4.2.0
Server has startup warnings:
2019-08-14T07:30:37.588+0000 I STORAGE [initandlisten]
2019-08-14T07:30:37.588+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2019-08-14T07:30:37.588+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use test
switched to db test
> db.createUser({user:'yuange',pwd:'1433223',roles:[{role:"readWrite",db:"test"}]})
Successfully added user: {
"user" : "yuange",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
> db.newclo.insert({desc:"Hello Mongo!"})
WriteResult({ "nInserted" : 1 })
>
第五步 安装flask_pymongo
请完成Python Flask Web 开发 - Hello World!先,以确保Flask环境正常。
pip install flask_pymongo
第六步 创建访问MongoDB的页面mongo.py
mongodb://<user>:<password>@<mongodb_host>:<port>/<db_name>
from flask import Flask
from flask_pymongo import PyMongo
app = Flask(__name__)
app.config['MONGO_URI'] = "mongodb://yuange:1433223@localhost:27017/test"
mongo = PyMongo(app)
@app.route('/')
def index():
s = ''
for i in mongo.db.newclo.find({}, {'desc':True}):
print(i)
s = s + i['desc']
html = '<h1>' + s + '</h1>'
return html
if __name__ == '__main__':
app.run(debug=True)
第七步 启动Web服务
python mongo.py
第八步 在浏览器中访问页面,页面显示的文字是从MongoDB中读取的
浏览器访问效果