docker compose 安装 falsk

之前写过一篇,但已经过时了,

https://blog.csdn.net/tang05709/article/details/78049492

同样需要3个文件

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /jiajuhui
WORKDIR /jiajuhui
COPY requirements.txt /jiajuhui/
RUN pip install -r requirements.txt
COPY . /jiajuhui/

requirements.txt

Flask>=1.0
Flask-SQLalchemy>=2.3
Flask-Migrate>=2.3
PyMySQL>=0.9

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:5.7
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=1
    ports:
      - "3316:3306"
  web:
    build: .
    environment:
      - FLASK_ENV=development
    command: bash -c "flask run --host=0.0.0.0 --port=5000"
    volumes:
      - .:/jiajuhui
    ports:
      - "5000:5000"
    depends_on:
      - db

新版flask推荐使用setup运行,并且debug=True不再支持开发环境

需要使用export FLASK_ENV = development

运行flask使用flask run

所以compose需要把环境设置下,并且使用flask run 运行flask

build docker 

docker-compose build web

run docker

docker-compose up

app.__init__.py

import os
from flask import Flask
from sqlalchemy import MetaData
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import pymysql

pymysql.install_as_MySQLdb()

convention = {
    "ix": 'ix_%(column_0_label)s',
    "uq": "uq_%(table_name)s_%(column_0_name)s",
    "ck": "ck_%(table_name)s_%(constraint_name)s",
    "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
    "pk": "pk_%(table_name)s"
  }
metadata = MetaData(naming_convention = convention)
db = SQLAlchemy(metadata = metadata)


def create_app():
  app = Flask(__name__)
  app.config.from_object('config.DevelopmentConfig')

  db.init_app(app)

  migrate = Migrate(app, db)

  from app.backend import auth, taxon
  from app import models
  app.register_blueprint(auth.bp)
  app.register_blueprint(taxon.bp)

  return app

config.py

class Config(object):
  DEBUG = False
  TESTING = False
  CSRF_ENABLED = True
  SQLALCHEMY_TRACK_MODIFICATIONS = True
  SECRET_KEY = 'JiaJUHuiDevelopmentByDonald'
  SQLALCHEMY_DATABASE_URI = 'mysql://root@db/jiajuhui_development'

class ProductionConfig(Config):
  DATABASE_URI = ''

class DevelopmentConfig(Config):
  DEVELOPMENT = True
  DEBUG = True
  #mysql://username:password@server/db
  SQLALCHEMY_DATABASE_URI = 'mysql://root@db/jiajuhui_development'

setup.py

from setuptools import find_packages, setup

setup(
  name = 'jiajuhui',
  version = '1.0.0',
  packages = find_packages(),
  install_requires = [
    'Flask>=1.0',
    'Flask-SQLalchemy>=2.3',
    'Flask-Migrate>=2.3'
  ]
)

建立migrate

进入docker容器,在容器外使用host:db是链接不了数据库的

docker exec -it container_id /bin/bash

初始化migrate

flask db init

生成migrate文件

flask db migrate

创建数据表

flask db upgrade

猜你喜欢

转载自blog.csdn.net/tang05709/article/details/87010192