美文网首页
Docker_5_1_搭建flask+react+mariadb

Docker_5_1_搭建flask+react+mariadb

作者: zestloveheart | 来源:发表于2019-05-02 15:31 被阅读0次

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_5_1_搭建flask+react+mariadb

      本文链接:https://www.haomeiwen.com/subject/fvhwnqtx.html