Motivation
最近打算开发一套web系统,整合和更新自己之前所学的一些工程技术。
系统打算采用前后端分离架构,并以微服务为主,采用RESTful API的设计思想。
后台微服务主要基于Flask(Python的web框架)的fastAPI开发。如果后面有其他需要,会考虑加上Java的Spring Boot。
使用python的主要目的是要展示做爬虫、数据分析、机器学习的工作。
前端:React
数据库:mariadb(mysql)
先分成几个部分探索搭建,然后使用docker-compose组合,打造一套Full Docker Integration (Docker based) 环境。保证项目的快速搭建和部署,同时也深入学习Docker的相关使用方法。
本套工作主要包含以下部分:
- flask
- react
- mariadb
- 使用docker-compose组合
- 其他
在本篇主要介绍采用flask的后台环境搭建
在下一篇再提react及其他后续搭建工作
flask基础搭建
参考:
https://zhuanlan.zhihu.com/p/55673749
https://github.com/tiangolo/uwsgi-nginx-flask-docker
基础搭建
- 拉镜像
# 搜索镜像
docker search flask
# 拉取镜像并查看是否成功
docker pull tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8
docker images
- 编写代码
创建如下文件结构:
flask
└── app
└── main.py
main.py文件代码如下:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World from Flask!"
if __name__ == "__main__":
# 测试环境下才开启debug模式
app.run(host='0.0.0.0', debug=True, port=80)
- 运行容器
docker run -it --name flask_test -p 8080:80 -v /docker/flask/app:/app -w /app tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8 python main.py
- 进入浏览器输入localhost:8080测试
自定义镜像
- 在flask下创建Dockerfile,内容如下:
# 基础镜像
FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.8
# 没有vim来查看文件很不习惯,利用alpine的包管理安装一个来
RUN apk add vim
# 顺便用pip安装个redis包,后面用得上
RUN pip3 install redis
# 将我们的app文件加入到自定义镜像里面去
COPY ./app /app
- 构建容器
在Dockerfile同级目录执行docker build -t myflask .
实现能记录访问次数的service
- 在flask下创建docker-compose.yml,内容如下:
version: '3'
services:
flask:
image: myflask
container_name: myflask
ports:
- 8080:80
volumes:
- /docker/flask/app:/app
working_dir: /app
# 运行后执行的命令
command: python main.py
redis:
# 如果没有这个镜像的话会自动下载
image: "redis:latest"
container_name: myredis
- 修改main.py,内容如下:
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route("/")
def hello():
count = redis.incr('visit')
return f"Hello World from Flask! 该页面已被访问{count}次。"
if __name__ == "__main__":
# Only for debugging while developing
app.run(host='0.0.0.0', debug=True, port=80)
- 启动容器:docker-compose up
其他教程
-
docker搭建其他flask相关教程
python包结构项目
高级教程
https://medium.com/@tiangolo/react-in-docker-with-nginx-built-with-multi-stage-docker-builds-including-testing-8cc49d6ec305
前端系统搭建
full-stack-fastapi-couchbase
full-stack系统
couchdb or couchbase -
fastAPI
fastapi
-
RESTful API设计
https://www.zhihu.com/question/28557115
https://www.jianshu.com/p/84568e364ee8
https://blog.csdn.net/chenxiaochan/article/details/73716617 -
flask教程:
https://read.helloflask.com/
http://www.bjhee.com/flask-1.html
https://spacewander.github.io/explore-flask-zh/index.html -
docker的一套项目部署工具 machine compose swarm
-
cookiecutter
https://zhuanlan.zhihu.com/p/23838010 -
zeroMQ:
http://dockone.io/article/1068
https://www.cnblogs.com/binchen-china/p/5643531.html
https://blog.csdn.net/huoyan403/article/details/76674744 -
django
https://hub.docker.com/_/django
https://www.django-rest-framework.org/
http://blog.xander-ye.com/hello-docker/
https://blog.csdn.net/hbnn111/article/details/77176629
https://segmentfault.com/a/1190000002989928
https://www.cnblogs.com/purpleraintear/p/6003645.html
http://dockone.io/article/3656
https://zhuanlan.zhihu.com/p/29609591
https://segmentfault.com/a/1190000010227994
网友评论