Flask是一個使用Python編寫的Web框架,而MySQL是一款流行的關系型數據庫管理系統。在將Flask應用部署到生產服務器時,我們需要考慮如何處理數據庫。這時候,Docker就非常有用,可以將Flask和MySQL都打包到容器中,方便管理和部署。
首先,我們需要創建一個Flask應用,并安裝MySQL數據庫驅動。使用命令pip install flask-mysql
即可安裝。下面是一個基本的Flask應用,使用MySQL數據庫:
from flask import Flask from flaskext.mysql import MySQL app = Flask(__name__) # MySQL configuration app.config['MYSQL_DATABASE_USER'] = 'root' app.config['MYSQL_DATABASE_PASSWORD'] = 'password' app.config['MYSQL_DATABASE_DB'] = 'test' app.config['MYSQL_DATABASE_HOST'] = 'localhost' mysql = MySQL() mysql.init_app(app) @app.route('/') def hello_world(): cursor = mysql.get_db().cursor() cursor.execute('SELECT * FROM users') result = cursor.fetchall() return str(result) if __name__ == '__main__': app.run()
接下來,我們可以使用Docker Compose來定義Flask和MySQL的容器。
version: '3' services: app: build: . ports: - "5000:5000" depends_on: - db environment: DATABASE_URL: mysql://root:password@db/test db: image: mysql:latest environment: MYSQL_RANDOM_ROOT_PASSWORD: 'yes' MYSQL_DATABASE: test MYSQL_USER: root MYSQL_PASSWORD: password
在上面的代碼中,我們定義了兩個服務:app和db。app使用build: .
指令來構建Flask應用的Docker鏡像。它還使用depends_on
指令來表示它依賴于db服務,也就是MySQL容器。
db服務使用了MySQL官方提供的Docker鏡像。我們設置了MySQL的root密碼,以及要創建的數據庫(test)、用戶名(root)和密碼(password)。
我們還可以在app服務中通過environment
指令設置數據庫的連接信息。在Flask應用中使用app.config['MYSQL_DATABASE_HOST']
就可以獲取到這些信息,從而連接到MySQL數據庫。
最后,我們可以在終端中使用docker-compose build
構建這兩個容器,然后使用docker-compose up
啟動它們。通過訪問http://localhost:5000/
,我們就可以看到從MySQL數據庫中查詢到的數據了。