之前写过一篇,但已经过时了,
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