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基础搭建
基础搭建拉镜像
# 搜索镜像
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
其他教程