欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker構(gòu)建python Flask+ nginx+uwsgi容器

 更新時間:2020年09月06日 09:57:27   作者:Charlie。  
這篇文章主要介紹了Docker構(gòu)建python Flask+ nginx+uwsgi容器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

安裝Nginx

首先拉下centos鏡像docker pull centos

我們安裝最新的nginx1.19版本:下載地址

將centos鏡像運行起來并進入:

docker run --name ver -d -p 8051:80 -it nginx_start

將nginx-1.19.0.tar.gz這個包放入容器里面:

docker cp nginx-1.19.0.tar.gz 10e87af84c05:/root(10e87af84c05為centos容器id)

安裝nginx前先裝一些依賴:

yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

解壓:

tar -zxvf nginx-1.19.0.tar.gz
#進入到nginx-1.10.1 ,并配置nginx
 cd nginx-1.19.0
 #配置nginx
 #--prefix 指定安裝的目錄
 #/usr/local/nginx 是安裝目錄,不能和自己下載的文件目錄重了
 #./configure --prefix=/usr/local/nginx
 
 #帶ssl stub_status模塊 添加strem模塊 –with-stream,這樣就能傳輸tcp協(xié)議了
 #http_stub_status_module 狀態(tài)監(jiān)控
 #http_ssl_module  配置https
 #stream 配置tcp得轉(zhuǎn)發(fā)
 #http_gzip_static_module 壓縮
 #http_sub_module 替換請求
 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream

注:

在這里我出現(xiàn)了pcre和zlib缺失的錯,可以使用yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel命令,安裝所有依賴。

make & make install進行編譯安裝

安裝成功后,在./configure --prefix=/usr/local/nginx指定目錄會生成四個文件,我們也只需要輸入/usr/local/nginx/sbin/nginx來啟動nginx服務即可。

要驗證是否成功,可以輸入curl localhost來查看是否啟動成功。

生成鏡像

10. 將裝有nginx的centos容器打包為鏡像docker commit ba5ba0d81912 nginx_centos(ba5ba0d81912 為容器ID,重命名為nginx_centos)
11. 重新運行新的鏡像:docker run --name ver -d -p 8051:80 -it nginx_centos
12. 而此時的鏡像,則是有我們安裝好的nginx,我們就可以拿他開始為所欲為,做一些其他的騷操作了。

安裝python2.7環(huán)境

yum install gcc openssl-devel bzip2-devel

用 wget 下載 python 2.7 并解壓

yum -y install wget 

進入目錄 /usr/src 再用 wget 下載 python 2.7

cd /usr/src
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz

再解壓 python2.7

tar -zxvf Python-2.7.15.tgz

安裝 python 2.7

進入上面解壓的 Python-2.7.15 解壓文件中使用下面命令行安裝

cd Python-2.7.15
./configure --enable-optimizations
make altinstall

安裝 PIP

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python2.7 get-pip.py

因為版本為2.7,且requirements.txt里面有一個 MYSQL-python的庫,會報一個找不到libmysqlclient-dev的錯,執(zhí)行yum install mysql-devel即可解決。

安裝UWSGI

pip install uwsgi的時候會報一個錯:

plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
#include <Python.h>


運行yum install python-devel.x86_64即可解決,并重新pip install即可下載。

配置uWSGI服務器

相關uwsgi.ini文件內(nèi)容如下:

[uwsgi]
socket = /tmp/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 664
# Graceful shutdown on SIGTERM, see https://github.com/unbit/uwsgi/issues/849#issuecomment-118869386
hook-master-start = unix_signal:15 gracefully_kill_them_all

在項目目錄下/app/創(chuàng)建uwsgi.ini文件:

[uwsgi]

uwsgi-socket = /tmp/uwsgi.sock
chmod-socket = 777
callable = app
wsgi-file = main.py
buffer-size = 65535
processes = %(%k * 2)
threads = %(%k * 20

其中每個參數(shù)的意思:

uwsgi-socket:將uwsgi-socket這個配置項指定了一個文件,這個文件是Unix套接字,即通過文件系統(tǒng)
(而非網(wǎng)絡地址)進行尋址和訪問的套接字。配置uwsgi-socket之后,還需要配置chmod-socket,
Unix socket是個文件,所以會受到Unix系統(tǒng)的權(quán)限限制,可以配置成660或者777,
使得uwsgi客戶端能夠訪問這個Unix socket文件,這里配置為777。

callable:設置在收到請求時,uwsgi加載的模塊中哪個變量將被調(diào)用,默認是名字為“application”的變量。

wsgi-file:加載指定的wsgi文件。

buffer-size:設置用于uwsgi包解析的內(nèi)部緩存區(qū)大小。默認是4k。

processes和threads,分別是開啟的進程數(shù)和線程數(shù),而%k是魔數(shù)變量,代表CPU核數(shù),如果我們是雙核CPU,
那這里的processes和threads分別為4和40,即有4個進程,每個進程有40個線程。

安裝Supervisor(可選)

直接yum安裝會報一個No package supervisor available.的錯誤,那是因為CentOS是RedHat企業(yè)版編譯過來的,去掉了所有關于版權(quán)問題的東西。只需要執(zhí)行yum install epel-release即可解決。安裝好后會生成如下目錄:


現(xiàn)在我們將配置supervisor,使得supervisor監(jiān)聽nginx和uwsgi服務。

首先在/etc目錄下創(chuàng)建supervisor文件,然后創(chuàng)建supervisord.conf文件和conf.d目錄:


supervisord.conf目錄配置如下:

; supervisor config file

[unix_http_server]
file=/var/run/supervisor/supervisor.sock  ; (the path to the socket file)
chmod=0700            ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor      ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket

; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf

再在conf.d目錄下創(chuàng)建supervisord.conf文件并編輯:

[supervisord]
nodaemon=true

[program:uwsgi]
command=/usr/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini --die-on-term --need-app
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

[program:nginx]
command=/usr/local/nginx/sbin/nginx
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
# Graceful stop, see http://nginx.org/en/docs/control.html
stopsignal=QUIT

以上路徑均為實際目錄配置,如果有不一樣則需要更改。

然后將supervisor啟動:


以上配置弄好后,我們將容器重新打包生成一個新的鏡像,記為base_v3,我們寫一個打包docker應用的Dockerfile:

FROM base_v3
 
# 創(chuàng)建工作路徑
RUN mkdir /app
 
# 指定容器啟動時執(zhí)行的命令都在app目錄下執(zhí)行
WORKDIR /app
 
# 替換nginx的配置
COPY nginx.conf /etc/nginx/nginx.conf
 
# 將本地app目錄下的內(nèi)容拷貝到容器的app目錄下
COPY ./app/ /app/

這里,在Dockerfile和app同級目錄下,再建立一個nginx.conf文件,并將nginx.conf內(nèi)容修改如下:

user nginx;
worker_processes 1;
error_log /usr/local/nginx/logs/error.log warn;
pid    /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 20480;


events {
 use epoll;
 worker_connections 20480;
 multi_accept on;
}


http {
  include    /usr/local/nginx/conf/mime.types;
  default_type application/octet-stream;

  log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for"';
  #請求量級大建議關閉acccess_log
  #access_log /var/log/nginx/access.log main;

  sendfile    on;
  #tcp_nopush   on;

  keepalive_timeout 300s;
  client_header_timeout 300s;
  client_body_timeout 300s;

  gzip on;
  gzip_min_length 1k;
  gzip_buffers 4 16k;
  gzip_types text/html application/javascript application/json;

  include /usr/local/nginx/conf.d/*.conf;

  server {
   listen 6666;
   charset utf-8;
   client_max_body_size 75M;
   location / {
    include uwsgi_params;
    uwsgi_pass unix:///tmp/uwsgi.sock;
    uwsgi_send_timeout 300;
    uwsgi_connect_timeout 300;
    uwsgi_read_timeout 300;
   }
  }
}

接下來只需要docker build -t new_project .docker run --name test -d -p 8055:6666 -v /root/web/mim_backend/data:/app/static -v /root/logs/mim_backend:/app/log -it new_project即可。
當然,這個時候進去nginx和uwsgi沒有自動啟動,需要手動拉起來,如想自動拉起服務,可選用supervisor或者在dockerfile里面加一個ENTRYPOINT nginx -g "daemon on;" && uwsgi --ini /app/uwsgi.ini

然后隨便跑一個接口測試:

到此這篇關于Docker構(gòu)建python Flask+ nginx+uwsgi容器的文章就介紹到這了,更多相關Docker構(gòu)建Flask+ nginx+uwsgi內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解docker pull 下來的鏡像都存到了哪里

    詳解docker pull 下來的鏡像都存到了哪里

    這篇文章主要介紹了詳解docker pull 下來的鏡像都存到了哪里,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 容器Docker入門詳解

    容器Docker入門詳解

    這篇文章主要介紹了容器Docker入門詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • docker安裝RocketMQ的實現(xiàn)步驟

    docker安裝RocketMQ的實現(xiàn)步驟

    本文主要介紹了docker安裝RocketMQ的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 深入理解docker鏡像的分層(小白必看)

    深入理解docker鏡像的分層(小白必看)

    本文關鍵詳細介紹了Docker鏡像層次的基本原理詳細說明,原文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Docker?隔離與限制原理介紹

    Docker?隔離與限制原理介紹

    這篇文章主要介紹了Docker?隔離與限制原理,對于?Docker?等大多數(shù)?Linux?容器來說,Cgroups?技術是用來制造約束的主要手段,而?Namespace?技術則是用來修改進程視圖的主要方法,下文相關介紹,需要的朋友可以參考一下
    2022-04-04
  • Docker實踐之python應用容器化

    Docker實踐之python應用容器化

    這篇文章主要介紹了Docker實踐之python應用容器化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較

    詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較

    這篇文章主要介紹了詳解Dockerfile創(chuàng)建自定義Docker鏡像以及CMD與ENTRYPOINT指令的比較,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • docker部署redis報錯內(nèi)存分配過度解決辦法

    docker部署redis報錯內(nèi)存分配過度解決辦法

    Docker很適合用于測試發(fā)布,將Docker封裝后可以直接提供給測試人員進行運行,不再需要測試人員與運維、開發(fā)進行配合,進行環(huán)境搭建與部署,這篇文章主要給大家介紹了關于docker部署redis報錯內(nèi)存分配過度的解決辦法,需要的朋友可以參考下
    2023-11-11
  • docker compose 服務啟動順序控制的方法

    docker compose 服務啟動順序控制的方法

    這篇文章主要介紹了docker compose 服務啟動順序控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • docker對網(wǎng)絡和程序速度的影響解讀

    docker對網(wǎng)絡和程序速度的影響解讀

    本文通過對比分析,測試了在宿主機和Docker容器中部署Spring Boot程序的性能差異,在網(wǎng)絡延遲方面,Docker容器比宿主機慢0.1~0.2毫秒,在程序運行速度方面,宿主機和Docker容器的平均運行時間相近,單次運行時間存在較大差異,無法確定Docker容器在速度上優(yōu)于宿主機
    2025-01-01

最新評論