開啟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服務僅限於開發環境使用,生產環境不夠穩定,也無法承...