Python Flask項目在Gitlab CI中自動打包Docker鏡像

第一步,在Gitlab中新建一個項目

第二步,克隆支本地


第三步,本地調通Python Flask項目

用VSCode打開該項目,先用flask在app.py下寫了一個hello world:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')

def index():

????return render_template('index.html')

if __name__ == '__main__':

? ??app.run(port=5000, debug=True)

然后在index.html中寫下hello world,放在templates目錄下:

<html>

????<head></head>

????<body>

????????<div>Hello World</div>

????</body>

</html>

安裝flask依賴

pip3 install flask

用以下命令進行本地運行

python3 app.py

打開瀏覽器進入localhost:5000即可看到Hello World


本地調試成功

第四步,本地調通Docker打包與容器運行

于是嘗試利用docker打包成鏡像,由于該項目依賴flask庫,所以在根目錄添加了requirements.txt文件,里面標明了依賴庫以及相應的版本

Flask==2.0.2

然后編寫好了Dockerfile

FROM python:3

COPY . /app/

RUN pip install -r /app/requirements.txt

WORKDIR /app

EXPOSE 5000

CMD?["python", "app.py"]

運行命令開始打包:

docker build -t flask-gitlab-ci-build-docker:latest .

打包成功,運行容器:

docker run -d -p 80:5000 flask-gitlab-ci-build-docker:latest

在瀏覽器瀏覽localhost沒有響應

查看日志發(fā)現(xiàn)沒有報錯


再嘗試用瀏覽器打開127.0.0.1,也不行


網(wǎng)上搜索發(fā)現(xiàn)python flask在服務器不能直接運行,需要借助gunicorn

于是編寫了配置文件gunicorn.conf.py:

workers = 5 # 定義同時開啟的處理請求的進程數(shù)量,根據(jù)網(wǎng)站流量適當調整

worker_class = "gevent" # 采用gevent庫,支持異步處理請求,提高吞吐量

bind = "0.0.0.0:5000" # 監(jiān)聽IP放寬,以便于Docker之間、Docker和宿主機之間的通信

同時修改了Dockerfile:

FROM python:3

COPY . /app/

RUN pip install -r /app/requirements.txt

WORKDIR /app

EXPOSE 5000

CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]

以及修改了依賴包requirements.txt:

blinker==1.4

Flask==2.0.2

gevent==21.12.0

gunicorn==20.1.0

再打包鏡像、運行容器,發(fā)現(xiàn)可以正常運作了:

第五步,Gitlab CI設置腳本自動打包Docker鏡像

stages:

? ?- buildAndDeploy

buildAndDeploy:

? stage: buildAndDeploy

??image: docker:latest

? script:

? ? - docker login -u ${docker_registry_username} -p ${docker_registry_password} ${docker_registry_organization_qa}

? ? - docker build -t ${docker_registry_organization_qa}/${docker_registry_project}:$CI_COMMIT_SHORT_SHA .

? ??- docker push ${docker_registry_organization_qa}/${docker_registry_project}:$CI_COMMIT_SHORT_SHA

由于自建Docker鏡像倉庫和賬號是隱私信息,因此使用Gitlab CI變量代替,再在項目CI/CD設置內賦值

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容