Docker部署Python項目


簡介

軟件開發最大的麻煩事之一就是環境配置,操作系統設置,各種庫和組件的安裝。只有它們都正確,軟件才能運行。如果從一種操作系統里面運行另一種操作系統,通常我們采取的策略就是引入虛擬機,比如在 Windows 系統里面運行 Linux 系統。這種方式有個很大的缺點就是資源占用多、冗余步驟多、啟動慢。目前最流行的 Linux 容器解決方案之一就是Docker,它最大優點就是輕量、資源占用少、啟動快。本文從什么是Docker?Docker解決什么問題?有哪些好處?如何去部署實現去全面介紹。

docker部署項目優勢

設想這樣一個真實案例,假如我們要部署一個Python應用程序,要做哪些工作?首先需要python運行環境,比如部署的是python3,而機器上是python2。先裝個python3,還要裝各種依賴包,機器一些可能的沖突。裝完python之后,發現還要裝mysql或者redis。繼續下載安裝配置。啥?服務器不用了,需要換一台服務器?那重新來一遍吧。啥?基礎應用做的太好要進行推廣,需要指導其他廠商部署?這怎么辦?可以看出,在 Docker 之前軟件行業的運維存在着以下這些痛點:

# 1. 軟件的發布和部署低效又繁瑣,而且總是需要人工介入
# 2. 環境的一致性難移保證
# 3. 在不同環境之間遷移的成本較高

在完成Docker部署安裝之前,我們還是先認識下Docker的優點:

# 1. 軟件構建容易,分發簡單
# 2. 應用得到隔離,依賴被解除
# 3. 可以完美地用於 CI/CD
# 4. 快速部署,測試完以后銷毀也方便

方式一: 基於Python基礎鏡像

# 准備數據目錄
mkdir myproject
cd myproject
docker run -di --name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6

# 將你的項目上傳到服務器掛載的存儲卷上
scp django.tar.gz 149.129.38.117:
cp /root/django.tar.gz /home/myproject/
tar xvf django.tar.gz

# 進入容器安裝相關依賴
pip install -r requirement.txt
apt-get update
apt-get install vi

# setting.py 改成下面
ALLOWED_HOSTS = ['*']
# 運行項目(wsgiref)
python manage.py runserver 0.0.0.0:8080

uwsgi運行項目

pip3 install uwsgi

# 在項目根路徑下創建一個uwsgi.ini 文件,寫入

[uwsgi]
#配置和nginx連接的socket連接
socket=0.0.0.0:8080
#也可以使用http
#http=0.0.0.0:8080
#配置項目路徑,項目的所在目錄
chdir=/home/django_test
#配置wsgi接口模塊文件路徑
wsgi-file=django_test/wsgi.py
#配置啟動的進程數
processes=4
#配置每個進程的線程數
threads=2
#配置啟動管理主進程
master=True
#配置存放主進程的進程號文件
pidfile=uwsgi.pid
#配置dump日志記錄
daemonize=uwsgi.log


#啟動,停止,重啟,查看
uwsgi --ini uwsgi.ini #啟動
lsof -i :8001    #按照端口號查詢
ps aux | grep uwsgi   #按照程序名查詢
kill -9 13844       #殺死進程

uwsgi --stop uwsgi.pid      #通過uwsg停止uwsgi
uwsgi --reload uwsgi.pid  #重啟

# nginx轉發

mkdir -p nginx/conf nginx/html nginx/logs

# 在conf目錄下新建nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
          #uwsgi_pass 149.129.38.117:8080;
          proxy_pass http://149.129.38.117:8080;
        }  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx

# 在 python的docker中用uwsgi跑起項目來即可

# 外部訪問:http://149.129.38.117/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM