実現したいこと
FlaskとDockerを用いてローカル環境にマイクロサービスを展開する。
発生している問題・エラーメッセージ
docker-compose.yml の nginx-proxy の ports: を変更するとうまく表示されないので、なぜなのかを教えてほしいです。Docker component の扱いは初心者なので、どこのポート番号がどことリンクしているのかなどがあいまいです。
ファイルの構造
- env/ (省略)
- certs/ (.crt, .csr, .key)
- conf/
- localhost
- service1/
- templates/ (htmlファイル群)
- Dockerfile
- main.py
- requirements.txt
- service2/ (server1と同様)
- service3/ (server1と同様)
- docker-compose.yml
該当コード一覧
main.py
1from flask import Flask, render_template 2 3app = Flask(__name__) 4 5@app.route('/') 6def index(): 7 return render_template('a.html') 8 9if __name__ == "__main__": 10 app.run(host="0.0.0.0", port=5000, debug=False)
Dockerfile
1FROM python:alpine 2 3RUN pip install Flask \ 4 && pip install SQLAlchemy \ 5 && pip install flask_sqlalchemy 6 7CMD [python, main.py] 8ENV LANG='ja_JP.UTF-8'
docker
1version: "3" 2 3x-common: &common 4 working_dir: /service 5 tty: true 6 command: [python, main.py] 7 8services: 9 nginx-proxy: 10 image: jwilder/nginx-proxy:alpine 11 # "ホストのポート:コンテナのポート"2つを接続。(例:ホストの5000番ポートへのリクエストは、プロキシのコンテナ内の5000番に転送。) 12 ports: 13 - "5000:80" 14 volumes: 15 - /var/run/docker.sock:/tmp/docker.sock:ro 16 # confファイルをnginxに利用 17 - ./conf:/etc/nginx/vhost.d 18 - ./certs:/etc/nginx/certs 19 depends_on: 20 - service1 21 - service2 22 - service3 23 24 # gateway 25 termination: 26 image: containous/whoami 27 environment: 28 - VIRTUAL_HOST=localhost 29 30 service1: 31 <<: *common 32 build: ./service1 33 volumes: 34 - ./service1:/service 35 36 service2: (service1の数字部分を2に変更したのみ) 37 service3: (service1の数字部分を3に変更したのみ)
localhost
1location /api/service1/ { 2 proxy_pass http://service1:5000/; 3 # :[ポート番号]のURLにプロキシされる。つまり、/api/service1/へのリクエストはservice1コンテナの[ポート番号]に転送される。 4} 5 6location /api/service2/ { 7 proxy_pass http://service2:5000/; 8} 9 10location /api/service3/ { 11 proxy_pass http://service3:5000/; 12}
質問・理解したいこと
- なぜ docker-compose.yml > services > nginx-proxy > ports の" 5000:80 " の80をほかの数字に変更するとWebページにアクセスできなくなるのか。(ほかの箇所に80の数字を設定していないはずなのに)
- main.py や docker-compose.ymlでポート番号を指定しているが、どことどこの番号が一致している必要があるのか。
- 上記のファイル群で、重複や不必要であり削除できるコード、オプションなど。
- コードにコメントをして自分なりに解釈しているが、コメントの理解で適切か。
私なりに調べてみましたが、Webにアクセスして動作させることで精いっぱいです。。FlaskやDockerを扱う方からするとかなり基本的なシステムかもしれませんが、上記の質問、何卒ご教授お願いいたします。
補足
ローカル環境のポート番号80(http://127.0.0.1:80)は、Windows IIS に利用されています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/08 04:53
2023/06/08 04:57
2023/06/08 05:26
2023/06/08 05:37 編集
2023/06/08 07:57 編集
2023/06/08 11:58