Docker 部署 Flask 應用實踐

2021-10-01 16:37:31 字數 3039 閱讀 7327

開啟docker

在專案目錄下編寫 dockerfile 檔案,以下是我專案中dockerfile檔案,並對每一行進行解讀

from python:3.6  # 專案的基礎映象為 python3.6

expose 8080 # docker的指定出口埠為8080

run mkdir /project_name # 建立專案的目錄

copy . /project_name/ # 將專案**全部複製過去

run mkdir /log # 建立專案的日誌資料夾

run mkdir /deployments # 建立部署專案的指令碼目錄

copy run.sh /deployments # 將部署指令碼複製到專案部署目錄下

workdir /project_name # 指定專案目錄為工作目錄

run pip3 install --upgrade pip # 公升級pip包

run pip3 install -r requirements.txt -i --trusted-host pypi.tuna.tsinghua.edu.cn # 安裝專案python環境所需要的包,這裡指定了清華的映象源,安裝速度會快一些

entrypoint ["./docker-entrypoint.sh"]

cmd ["bash", "./run.sh"] # 部署專案的命令

編寫部署指令碼 run.sh , 舉例如下:

我這裡將服務名和每個服務的啟動命令放到了列表中,去遍歷

#!/bin/bash

#refer:

export pythonpath=/project_name

# 所有服務的名字

server_names=(

'celery'

)# 啟動這些服務的bash命令,和server_names一一對應

start_commands=(

)# 每個服務的日誌的路徑,和server_names一一對應

log_filenames=(

'/log/service.log'

'/log/async_task.log'

)# 遍歷所有服務,逐個啟動

len=$

for ((i=0;ido$

process_status=$?

if [ $process_status -ne 0 ]; then

echo "failed to start $, please see error log"

echo `cat $ | tail -n 150`

exit process_status

fidone

# 每30s遍歷所有服務,檢測服務執行狀態

while sleep 30; do

for ((i=0;i

dops aux |grep $ |grep -q -v grep

process_status=$?

if [ $process_status -ne 0 ]; then

echo "ops~~ : $ has already exited, please see error log"

echo `cat $ | tail -n 150`

exit 1

fidone

done

編寫gunicorn.conf 檔案,可以指定gunicorn啟動服務的配置,舉例

workers = 2

bind = "0.0.0.0:8080"

worker_class = "gevent"

timeout = 90

max_requests = 3000

threads = 8

本地測試

# 建立映象,進入本地專案目錄,指定dockerfile所在路徑

docker build -t project_name ~/pycharmprojects/project_name

# 啟動容器

docker run -it -p 8888:8080 project_name bash run.sh

若本地啟動一切正常,編寫.gitlab-ci.yml檔案,推送到gitlib上,走ci/cd 流程,可以看到最新的pipeline已打包完成

將容器註冊到gitlib上,方便以後直接拉取

一些常用的 docker 命令

檢視docker資訊: docker info

檢視映象列表:docker images

停用映象:docker stop imageid

重啟映象: docker start imageid

重新命名映象: docker tag imageid imagerepository:imagetag

刪除映象:docker rmi imageid

檢視容器:docker ps

docker ps -a 檢視所有容器,包括啟動失敗的

重新命名容器:dokcer rename 容器id mytomcat7:jre7

停止容器:docker stop 容器name

刪除所有未啟動容器:docker container prune

刪除容器: docker rm id

使用 docker search 命令來搜尋映象。如搜尋httpd的映象。

Docker部署Flask應用的實現步驟

一 目的 本地寫好乙個flask應用,用docker封裝,上傳至自己的伺服器,完成部署。流程圖 二 實驗環境 本地 windows10 1909 伺服器 阿里雲centos系統 三 所需軟體 1.dockerdesktop 2.pycharm 2020.3.3 四 步驟 1.本地完成flask應用的...

gunicorn 部署 flask 應用

一般比較習慣使用uwsgi進行部署django,flask應用。但,有時受許可權限制,無法安裝uwsgi,所以就使用gunicorn進行部署。之前使用python3的使用,發現 supervisor是不支援。所以就不打算用supervisor了。純粹介紹gunicorn 簡單部署方法,完整流程。環境...

Flask 應用如何部署

2.flask 如何部署 3.基於docker的flask 部署 flask gunicorn nginx是最常用的flask部署方案,大家深究過為何用這樣的搭配麼?flask 是乙個web框架,而非web server,直接用flask拉起的web服務僅限於開發環境使用,生產環境不夠穩定,也無法承...