2017-09-04 4 views
0

Dockerを初めて使用しています。私はマイクロサービスアーキテクチャのアプローチを使用して私のモノリシックアプリケーションを再構築したい。Dockerの使い方:nginx Webサーバーと通信するためにWebアプリケーションをワープする方法

私はFlagsアプリケーションサーバーがnginxサーバーと対話する必要があります。従来、uWSGIとして機能するGunicornを使用していましたが、Dockerを使用して同じことをどうやって行うことができますか?以下は

私のコードで、

私はここで

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') 

をExcelファイルをアップロードするかどうかをユーザに尋ねるフラスコアプリケーションは、

<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> 
index.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のコンテナと通信していることを確認するために自分のアプリケーションサーバーをラップする必要があります。 - >処理の開始を通知する送信ボタンをユーザがクリックするたびに、アプリケーションコンテナに通知する必要があります。 - >次に、処理が完了したら、OK処理が完了したことをnginxサーバーに通知する必要があります。

2)index.htmlを/ var/www/nginx/htmlにコピーする必要がありますか?

あなたは

+0

誰もプロセス全体を詳しく説明している1冊の本をお勧めできますか?ありがとうございます –

答えて

0
  1. あなたはあなたのアプリケーションコンテナ内Gunicornプロセスを開始する必要がありますありがとうございました。これで、localhost:8000(または選択したポート)でプロセスが実行されます。
  2. 次に、プロキシをアプリケーションに渡すnginxコンテナを作成します。

    proxy_pass http://web:8000;

おそらくそのdocker-composeプロセスを実行する方が簡単:サーバーブロックでyoullはこのようなものを持っています。相続人

私は私のwebサービスのために持っているDockerfileの抜粋:相続人

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そのDjangoはFlaskに簡単に似ていますが。

+0

私は過去2年間でいくつかの重要なニュースを見逃していたかもしれませんが、フラスコアプリのアプリケーションサーバーがまだ必要だと思います。あなたがUNIXソケットを持っていると話しているのでない限り。それで、それは物事をする別の方法です。 –

+0

もちろんです。 – Craicerjack

+0

これらの概念を詳細に説明した書籍をお勧めします.Dockerでアプリケーションを構築し、アプリケーションサーバーのWebサーバーをカバーしてください。 –

関連する問題