使用Docker容器化Flask應(yīng)用的簡單示例
在當(dāng)今的軟件開發(fā)中,容器化技術(shù)已經(jīng)變得不可或缺。Docker 作為容器化領(lǐng)域的佼佼者,為開發(fā)者提供了一種高效、便捷的方式來部署和運(yùn)行應(yīng)用程序。本文將通過一個簡單的 Flask 應(yīng)用示例,展示如何使用 Docker 將 Python 應(yīng)用程序容器化,從而實現(xiàn)快速部署和環(huán)境隔離。

一、項目背景
Flask 是一個輕量級的 Python Web 框架,非常適合開發(fā)小型到中型的 Web 應(yīng)用程序。它簡單易用,同時提供了足夠的靈活性來滿足開發(fā)者的各種需求。在本示例中,我們將創(chuàng)建一個簡單的 Flask 應(yīng)用,它包含兩個路由:一個默認(rèn)的首頁和一個可以接收用戶輸入名字的路由。
二、項目結(jié)構(gòu)
我們的項目結(jié)構(gòu)如下:
neural-api/ ├── src/ │ └── main.py ├── requirements.txt └── Dockerfile
src/main.py是我們的 Flask 應(yīng)用代碼。requirements.txt列出了應(yīng)用所需的 Python 依賴。Dockerfile是 Docker 鏡像構(gòu)建的配置文件。
三、Flask 應(yīng)用代碼
main.py
# 導(dǎo)入 Flask 模塊
from flask import Flask, request
# 創(chuàng)建 Flask 應(yīng)用實例
app = Flask(__name__)
# 定義默認(rèn)路由(首頁)
@app.route('/')
def home():
return '<h1>Welcome to My Flask App!</h1>'
# 定義一個路由,接收用戶輸入的名字
@app.route('/hello', methods=['GET', 'POST'])
def hello():
if request.method == 'POST':
# 如果是 POST 請求,從表單中獲取名字
name = request.form.get('name')
else:
# 如果是 GET 請求,從查詢參數(shù)中獲取名字
name = request.args.get('name', 'Guest')
return f'<h1>Hello, {name}!</h1>'
# 啟動 Flask 應(yīng)用
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) # 監(jiān)聽所有網(wǎng)絡(luò)接口的 5000 端口
requirements.txt
flask
四、Dockerfile 配置
Dockerfile 是構(gòu)建 Docker 鏡像的核心配置文件。它定義了如何從基礎(chǔ)鏡像開始,逐步構(gòu)建出最終的應(yīng)用鏡像。我們的 Dockerfile 如下:
# 使用 Python 3.9 作為基礎(chǔ)鏡像 FROM python:3.9 # 設(shè)置工作目錄 WORKDIR /neural-api # 將 requirements.txt 文件復(fù)制到工作目錄 COPY requirements.txt . # 將 src 目錄復(fù)制到工作目錄下的 src 目錄 COPY ./src ./src # 安裝 Python 依賴 RUN pip install -r requirements.txt # 定義容器啟動時運(yùn)行的命令 CMD ["python", "./src/main.py"]
Dockerfile 解釋
FROM python:3.9:指定基礎(chǔ)鏡像為 Python 3.9。Docker 會從 Docker Hub 拉取這個鏡像。WORKDIR /neural-api:設(shè)置工作目錄為/neural-api。后續(xù)的命令都會在這個目錄下執(zhí)行。COPY requirements.txt .:將requirements.txt文件復(fù)制到工作目錄。COPY ./src ./src:將本地的src目錄復(fù)制到容器的/neural-api/src目錄。RUN pip install -r requirements.txt:安裝requirements.txt中列出的 Python 依賴。CMD ["python", "./src/main.py"]:定義容器啟動時運(yùn)行的命令,啟動 Flask 應(yīng)用。
五、構(gòu)建和運(yùn)行 Docker 鏡像
1. 構(gòu)建鏡像
在項目根目錄下運(yùn)行以下命令來構(gòu)建 Docker 鏡像:
docker build -t neural-api:latest .
-t neural-api:latest:指定鏡像的名稱和標(biāo)簽。.:表示當(dāng)前目錄(包含 Dockerfile 和代碼)。
2. 運(yùn)行容器
構(gòu)建完成后,運(yùn)行以下命令啟動容器:
docker run -d -p 5000:5000 --name my_flask_app neural-api:latest

-d:以后臺模式運(yùn)行容器。-p 5000:5000:將容器的 5000 端口映射到宿主機(jī)的 5000 端口。--name my_flask_app:為容器指定一個名稱。neural-api:latest:使用剛剛構(gòu)建的鏡像運(yùn)行容器。
3. 訪問應(yīng)用
打開瀏覽器,訪問 http://localhost:5000,你會看到歡迎信息:
Welcome to My Flask App!
訪問 http://localhost:5000/hello?name=xiaoxiao,你會看到:
Hello, xiaoxiao!
六、總結(jié)
通過本文的示例,我們展示了如何使用 Docker 容器化一個簡單的 Flask 應(yīng)用。Docker 提供了一種簡單、高效的方式來部署和運(yùn)行應(yīng)用程序,同時確保環(huán)境的一致性和隔離性。無論是在開發(fā)、測試還是生產(chǎn)環(huán)境中,Docker 都能為你的應(yīng)用提供強(qiáng)大的支持。
希望這個示例能幫助你更好地理解和使用 Docker。如果你有任何問題或建議,歡迎在評論區(qū)留言。
七、Docker 常用命令
為了幫助你更好地使用 Docker,以下是一些常用的 Docker 命令:
1. 鏡像相關(guān)命令
拉取鏡像:
docker pull [鏡像名]:[標(biāo)簽]
示例:docker pull python:3.9
列出本地鏡像:
docker images
構(gòu)建鏡像:
docker build -t [鏡像名]:[標(biāo)簽] .
示例:docker build -t neural-api:latest .
刪除鏡像:
docker rmi [鏡像ID或鏡像名]
2. 容器相關(guān)命令
運(yùn)行容器:
docker run -d -p [宿主機(jī)端口]:[容器端口] --name [容器名] [鏡像名]
示例:docker run -d -p 5000:5000 --name my_flask_app neural-api:latest
列出正在運(yùn)行的容器:
docker ps
列出所有容器(包括停止的):
docker ps -a
停止容器:
docker stop [容器ID或容器名]
刪除容器:
docker rm [容器ID或容器名]
進(jìn)入正在運(yùn)行的容器:
docker exec -it [容器ID或容器名] /bin/bash
3. 其他命令
查看容器日志:
docker logs [容器ID或容器名]
清理未使用的鏡像和容器:
docker system prune
登錄 Docker Hub:
docker login
推送鏡像到 Docker Hub:
docker push [用戶名]/[鏡像名]:[標(biāo)簽]
這些命令涵蓋了 Docker 的基本操作,可以幫助你在日常開發(fā)中高效地使用 Docker。希望這些命令對你有所幫助!
到此這篇關(guān)于使用Docker容器化Flask應(yīng)用的簡單示例的文章就介紹到這了,更多相關(guān)Docker容器化Flask應(yīng)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Alpine Docker 容器中安裝包緩存與 C/C++ 運(yùn)行問題的經(jīng)驗
本文介紹了在Docker中使用Alpine鏡像部署C/C++應(yīng)用的優(yōu)化方法,今天就來分享下我在Alpine容器中解決安裝包緩存與C/C++程序運(yùn)行問題的經(jīng)驗,感興趣的朋友一起看看吧2025-06-06
使用docker搭建jenkins自動化工具的實現(xiàn)
大家在工作中,應(yīng)該都有使用過jenkins 自動化打包或發(fā)布,本文主要介紹了使用docker搭建jenkins自動化工具的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Docker核心組件之聯(lián)合文件系統(tǒng)詳解
這篇文章主要為大家介紹了Docker核心組件之聯(lián)合文件系統(tǒng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
Docker部署Nginx設(shè)置環(huán)境變量的實現(xiàn)步驟
本文主要介紹了Docker部署Nginx設(shè)置環(huán)境變量的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Docker容器實現(xiàn)MySQL多源復(fù)制場景分析
這篇文章主要介紹了Docker容器實現(xiàn)MySQL多源復(fù)制,通過本文學(xué)習(xí)可以掌握多源復(fù)制的好處,通過使用場景分析給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
使用DockerFile構(gòu)建鏡像與鏡像上傳的實現(xiàn)步驟
本文主要介紹了使用DockerFile構(gòu)建鏡像與鏡像上傳的實現(xiàn)步驟,使用Dockerfile好處是自動化構(gòu)建,確保環(huán)境的一致性和可重復(fù)性,跟蹤構(gòu)建過程的演化等,文中通過圖文講解的非常詳細(xì),需要的朋友可以參考下2024-02-02
詳解docker 允許主機(jī)ssh連接到docker容器中
本篇文章主要介紹了詳解docker 允許主機(jī)ssh到docker容器中,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05

