步驟1:準(zhǔn)備一個(gè) Flask 應(yīng)用
首先,我們需要有一個(gè)正在運(yùn)行的 Flask 應(yīng)用。在本例中,我們假設(shè)您已經(jīng)使用 flask 框架創(chuàng)建了一個(gè)名為 App.py
的 Python/ target=_blank class=infotextkey>Python Web 應(yīng)用程序,同時(shí)有靜態(tài)資源目錄 static
和模板文件目錄 templates
如下所示:
./
├── app.py
├── requirements.txt
├── static/
│ ├── css/
│ ├── img/
│ └── js/
└── templates/
├── login.html
├── logging.html
├── yunwei.html
├── 404.html
└── weixin.html
flask應(yīng)用安裝自己需求進(jìn)行開(kāi)發(fā),基本框架如下:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, World!'
if __name__ == '__mAIn__':
app.run()
當(dāng)您啟動(dòng)該應(yīng)用后,在命令窗口中應(yīng)該看到類似以下的信息表示 Flask 應(yīng)用服務(wù)已經(jīng)成功啟動(dòng):
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
請(qǐng)確保您的應(yīng)用已正確運(yùn)行后開(kāi)始下面步驟。
步驟2:創(chuàng)建 Dockerfile
在此步驟中,我們將創(chuàng)建一個(gè) Dockerfile
文件來(lái)定義 Docker 鏡像的構(gòu)建過(guò)程。
在項(xiàng)目根目錄下創(chuàng)建一個(gè)名為 Dockerfile
的文件,并添加以下內(nèi)容:(Dockerfile文件與app.py同目錄)
# 指定要使用的基礎(chǔ)鏡像
FROM python:3.9-slim-buster
# 將應(yīng)用復(fù)制到容器中
WORKDIR /app
COPY . /app
# 安裝應(yīng)用所需的依賴項(xiàng)
RUN pip install --no-cache-dir -r requirements.txt
# 暴露應(yīng)用程序的端口號(hào)
EXPOSE 5000
# 設(shè)置啟動(dòng)命令
CMD ["python", "app.py"]
讓我們一步步解析這個(gè) Dockerfile 文件:
-
第 1 行指定了我們將從哪個(gè)基礎(chǔ)鏡像開(kāi)始構(gòu)建。在這里,我們選擇了 Python 3.9 版本的 slim-buster 鏡像。 -
第 3-4 行將運(yùn)行目錄切換為 /app 并將當(dāng)前應(yīng)用的所有文件復(fù)制到容器中的 /app 目錄下。 -
第 6 行使用 pip 命令安裝 Flask 應(yīng)用程序所需的所有依賴項(xiàng),其中包括 Flask 庫(kù)和其他任何必要的庫(kù)(通過(guò) requirements.txt 文件指定,在代碼倉(cāng)庫(kù)中創(chuàng)建這個(gè)文件并將所有依賴項(xiàng)列在其中)。 -
第 8 行使用 EXPOSE 指令在容器中公開(kāi) Flask 應(yīng)用程序的端口 5000。 -
最后一行使用 CMD 指令以類似于在本地上運(yùn)行 Flask 類型的命令開(kāi)始在容器中運(yùn)行應(yīng)用。
步驟 3:構(gòu)建 Docker 鏡像(以阿里云鏡像倉(cāng)庫(kù)為例)
一旦有了 Dockerfile
文件,我們就可以使用 docker build
命令將其轉(zhuǎn)換為一個(gè)可重復(fù)的 Docker 鏡像。確保您當(dāng)前位于包含 Dockerfile
文件的目錄中,并執(zhí)行以下命令:
docker build -t your-repository-url/your-image-name:tag .
該命令將使用 Dockerfile 創(chuàng)建一個(gè)名為 your-image-name
、帶有 tag
標(biāo)簽的本地鏡像,并上傳到您配置好的 Docker Registry 中,這里以阿里云鏡像倉(cāng)庫(kù)為例。
請(qǐng)注意將 your-repository-url
替換為您的具體倉(cāng)庫(kù) URL 名稱, your-image-name
為您的鏡像名稱, tag
為版本號(hào)或標(biāo)識(shí)符(如 latest
)。
在運(yùn)行完這個(gè)命令后,如果一切順利 Docker 將會(huì)依照 Dockerfile 構(gòu)建出一個(gè)新的鏡像并在其中部署我們的 Flask 應(yīng)用。最終命令示例如下:
docker build -t registry.cn-hangzhou.aliyuncs.com/your-repository/your-image-name:tag .
步驟 4:上傳到阿里云鏡像倉(cāng)庫(kù)
阿里云提供了自己的容器鏡像服務(wù)(容器 registry),現(xiàn)在將打包好的 Docker 鏡像上傳到阿里云倉(cāng)庫(kù)中:
4.1:Docker 鏡像登錄
使用 Docker 命令行工具,輸入以下命令以在本地登錄到您的阿里云賬號(hào):
docker login --username=<userId> registry.cn-hangzhou.aliyuncs.com
當(dāng)您輸入密碼并通過(guò)身份驗(yàn)證后,您將得到類似以下輸出:
Login Succeeded
4.2:Push 到阿里云鏡像倉(cāng)庫(kù)
您已經(jīng)擁有一個(gè) Docker 鏡像,接下來(lái)只需要將它 push 到阿里云鏡像倉(cāng)庫(kù):
docker push registry.cn-hangzhou.aliyuncs.com/your-repository/your-image-name:tag
其中 your-repository
是您創(chuàng)建的阿里云命名空間名稱,your-image-name
和 tag
和之前創(chuàng)建鏡像時(shí)保持一致。
上傳成功后執(zhí)行該命令后將應(yīng)用程序的完整鏡像保存到阿里云容器鏡像服務(wù)。
最后,請(qǐng)注意在構(gòu)建和推送 Docker 鏡像時(shí)指定合適的版本控制 tag,并在推送后確保您已經(jīng)停止并刪除了本地。
4.3:以后可以直接拉取鏡像隨時(shí)使用,做到一次構(gòu)建到處使用。