引言
在當今數字化時代,擁有一個個人博客來記錄自己的學習、生活和見解是一件非常有意義的事情。然而,傳統的博客部署方式往往涉及復雜的環境配置和依賴管理,容易讓人望而卻步。而 Docker 的出現,為我們提供了一種簡單、高效的解決方案。本文將結合實際案例,詳細介紹如何使用 Docker 部署一個基于 Python Flask 框架的個人博客系統。
案例背景
我們的目標是搭建一個簡單的個人博客系統,允許用戶發布文章、查看文章列表和文章詳情。博客系統采用 Python Flask 框架開發,數據庫使用 MySQL。為了確保博客系統在不同環境下的一致性和可移植性,我們將使用 Docker 進行部署。
步驟 1:開發博客系統
1.1 創建項目目錄和虛擬環境
首先,創建一個項目目錄,并在其中創建一個虛擬環境:
mkdir my-blog
cd my-blog
python3 -m venv venv
source venv/bin/activate
1.2 安裝依賴庫
pip install flask mysql-connector-python
1.3 編寫博客系統代碼
創建一個名為 app.py 的文件,編寫博客系統的核心代碼:
from flask import Flask, render_template, request
import mysql.connectorapp = Flask(__name__)# 連接 MySQL 數據庫
mydb = mysql.connector.connect(host="localhost",user="your_username",password="your_password",database="blog_db"
)@app.route('/')
def index():cursor = mydb.cursor()cursor.execute("SELECT * FROM posts")posts = cursor.fetchall()return render_template('index.html', posts=posts)@app.route('/post/<int:post_id>')
def post(post_id):cursor = mydb.cursor()cursor.execute("SELECT * FROM posts WHERE id = %s", (post_id,))post = cursor.fetchone()return render_template('post.html', post=post)@app.route('/add_post', methods=['GET', 'POST'])
def add_post():if request.method == 'POST':title = request.form['title']content = request.form['content']cursor = mydb.cursor()sql = "INSERT INTO posts (title, content) VALUES (%s, %s)"val = (title, content)cursor.execute(sql, val)mydb.commit()return 'Post added successfully!'return render_template('add_post.html')if __name__ == '__main__':app.run(debug=True)
1.4 創建模板文件
在項目目錄下創建一個名為 templates 的文件夾,并在其中創建 index.html、post.html 和 add_post.html 三個模板文件。以下是 index.html 的示例代碼:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>My Blog</title>
</head>
<body><h1>My Blog</h1>{% for post in posts %}<h2><a href="/post/{{ post[0] }}">{{ post[1] }}</a></h2><p>{{ post[2] }}</p>{% endfor %}<a href="/add_post">Add Post</a>
</body>
</html>
步驟 2:創建 Dockerfile
為了將博客系統打包成 Docker 鏡像,我們需要創建一個 Dockerfile。在項目目錄下創建一個名為 Dockerfile 的文件,并添加以下內容:
# 使用官方的 Python 3.9 鏡像作為基礎鏡像
FROM python:3.9-slim# 設置工作目錄
WORKDIR /app# 將當前目錄下的所有文件復制到容器的 /app 目錄下
COPY. /app# 安裝應用所需的依賴
RUN pip install --no-cache-dir -r requirements.txt# 暴露應用的端口
EXPOSE 5000# 定義容器啟動時執行的命令
CMD ["python", "app.py"]
同時,在項目目錄下創建一個名為 requirements.txt 的文件,列出應用所需的依賴庫:
flask mysql-connector-python
步驟 3:創建 MySQL 容器
3.1 拉取 MySQL 鏡像
使用以下命令從 Docker Hub 拉取 MySQL 鏡像:
bash
docker pull mysql:8.0
3.2 運行 MySQL 容器
運行以下命令創建并啟動一個 MySQL 容器:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=your_password -e MYSQL_DATABASE=blog_db -p 3306:3306 mysql:8.0
-d:以守護進程模式運行容器。
–name:為容器指定一個名稱。
-e:設置環境變量,這里設置了 MySQL 的 root 密碼和數據庫名稱。
-p:將容器的 3306 端口映射到宿主機的 3306 端口。
3.3 創建數據庫表
使用以下命令進入 MySQL 容器的命令行:
docker exec -it mysql-container mysql -uroot -p
輸入之前設置的 root 密碼,登錄到 MySQL 數據庫。然后創建一個名為 posts 的表:
USE blog_db;
CREATE TABLE posts (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255),content TEXT
);
步驟 4:構建并運行博客系統容器
4.1 構建 Docker 鏡像
在項目目錄下,使用以下命令構建博客系統的 Docker 鏡像:
docker build -t my-blog-app.
4.2 運行博客系統容器
運行以下命令創建并啟動一個博客系統容器,并將其連接到 MySQL 容器:
docker run -d --name blog-container -p 5000:5000 --link mysql-container:mysql my-blog-app
–link:將博客系統容器連接到 MySQL 容器,并為 MySQL 容器指定一個別名 mysql。
步驟 5:訪問博客系統
打開瀏覽器,訪問 http://localhost:5000,你將看到博客系統的首頁。現在,你可以發布文章、查看文章列表和文章詳情了。
總結
通過使用 Docker,我們成功地將一個基于 Python Flask 框架的個人博客系統部署到了容器中。Docker 的容器化技術使得博客系統的部署變得簡單、高效,同時也確保了系統在不同環境下的一致性和可移植性。希望本文能夠幫助你快速上手 Docker,并將其應用到實際項目中。
注意事項
- 在實際生產環境中,建議使用更安全的方式管理 MySQL 的密碼,例如使用 Docker 機密(Docker Secrets)。
- 可以使用 Docker Compose 來管理多個容器的部署,簡化部署流程。
The end.