2017-09-04 83 views
0

我是使用Docker的新手。我想使用微服務架構方法重建我的單片應用程序。使用Docker:如何扭曲Web應用程序與nginx Web服務器進行通信

我有一個需要與nginx服務器交互的Flask應用程序服務器。傳統上我們使用Gunicorn作爲uWSGI,但我們如何使用Docker做同樣的事情?

下面是我的代碼,

我具有長頸瓶的應用程序,要求用戶上傳的Excel文件

from flask import Flask, request, render_template 
import os 
app = Flask(__name__) 
default_key = '1' 
app.config["UPLOAD_FOLDER"] = "/app" 

@app.route('/', methods=['GET', 'POST']) 
def mainpage(): 
    if request.method == 'POST': 
     print request.form 
    if request.method == 'POST' and request.form['submit'] == 'Check Results' : 
    #TODO: copy the file into named volume 
     f = request.files['file'] 
     filename = f.filename 
     print os.getcwd() 
     print os.listdir(os.getcwd()) 
     file1 = os.path.join(app.config['UPLOAD_FOLDER'], filename) 
     f.save(file1) 
     #TODO: ping the Classifier container 
    return render_template('index.html') 

#def receive_classifier_info(): 
    #TODO: the file has been received so succesfully display the message. 
#pass 

if __name__ == '__main__': 
    app.run(host='0.0.0.0') 

這裏是我的模板/ index.html的

<html> 
    <head> 
    <title>key value lookup service</title> 
    </head> 
    <body> 
    <form method="POST" enctype = "multipart/form-data"> 
     <br> 
     <h3>Select an input file</h3> 
     <input type="file" name="file" value="Browse"> 
     <br> 
     <h3>Insert a pic of the sample format</h3> 
     <br> 
     <input type="submit" name="submit" value="Check Results"> 
    </form> 
    </body> 
</html> 

接下來,這是我的Dockerfile來構建這個容器。

FROM python:2.7 
RUN pip install Flask==0.11.1 
RUN useradd -ms /bin/bash admin 
COPY app /app 
WORKDIR /app 
RUN chown -R admin:admin /app 
RUN chmod 755 /app 
USER admin 
CMD ["python", "app.py"] 

接下來,我有我的nginx服務器充當反向代理。

我被困在如何從這裏開始。 :(

我的問題是:

1)我應該如何總結我的應用程序服務器,以確保它與nginx的容器進行通信。 - >我需要通知我的應用程序容器,每當用戶點擊提交按鈕通知它開始處理。 - >接下來,一旦處理完成,它應通知nginx服務器確定處理已完成。

2)我應該將index.html複製到/ var/www/nginx/html嗎?

謝謝

+0

任何人都可以推薦一本書,詳細描述整個過程。謝謝 –

回答

0
  1. 你應該開始在你的應用程序容器中的Gunicorn過程。然後這將運行localhost:8000(或您選擇的端口)上的過程。
  2. 然後,您將創建一個nginx容器,將代理傳遞給您的應用程序。在您的服務器塊你會是這樣的:

    proxy_pass http://web:8000;

它可能更容易運行docker-compose過程。

繼承人的Dockerfile的片段我有我的web服務:

FROM ubuntu:16.04 

# Update OS 
RUN sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list 
RUN apt-get update 
RUN apt-get -y upgrade 

# Install Python 
RUN apt-get install -y python3 python3-pip python3-dev 

COPY ./

# Install app requirements 
RUN pip3 install -r requirements.txt 
# Set the default directory for our environment 
ENV HOME/
ENV PYTHONPATH=`$PWD`/.. 
WORKDIR/

ENTRYPOINT ["/usr/local/bin/gunicorn"] 

繼承人從一個碼頭工人,撰寫文件,我有我的瓶的應用程序的代碼段:

version: '2.2' 

services: 
    web: 
    restart: always 
    build: . 
    ports: 
     - "8000:8000" 
    command: ["app:app", "-w 4", "-t 90", "--log-level=debug", "-b 0.0.0.0:8000", "--reload"] 
    nginx: 
    restart: always 
    image: nginx:1.13.1 
    ports: 
     - "80:80" 
     - "443:443" 
    depends_on: 
     - web 
    links: 
     - web:web 

我真的很喜歡this docker入門教程。儘管它的Django很容易與Flask類似。

+0

也許我在過去的兩年中錯過了一些關鍵的新聞,但我認爲你仍然需要一款應用服務器來開發燒瓶應用程序。除非你正在談論擁有一個unix套接字。那麼這是一種不同的做事方式。 –

+0

當然是的。 – Craicerjack

+0

您能否推薦一本書詳細解釋這些概念,主要是在Docker中構建應用程序,涵蓋應用程序服務器Web服務器 –

相關問題