質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

マイクロサービス

マイクロサービスは、ある目的のサービスを構築する際に、一つの大きなプログラム(モノリス)ではなく、複数の小規模なサービスに分割して組み合わせることで機能を実現するアーキテクチャです。

Q&A

1回答

760閲覧

docker-compose.ymlにおけるポート番号と正しい記述方法

J0KER

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

マイクロサービス

マイクロサービスは、ある目的のサービスを構築する際に、一つの大きなプログラム(モノリス)ではなく、複数の小規模なサービスに分割して組み合わせることで機能を実現するアーキテクチャです。

0グッド

0クリップ

投稿2023/06/07 15:04

実現したいこと

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}

質問・理解したいこと

  1. なぜ docker-compose.yml > services > nginx-proxy > ports の" 5000:80 " の80をほかの数字に変更するとWebページにアクセスできなくなるのか。(ほかの箇所に80の数字を設定していないはずなのに)
  2. main.py や docker-compose.ymlでポート番号を指定しているが、どことどこの番号が一致している必要があるのか。
  3. 上記のファイル群で、重複や不必要であり削除できるコード、オプションなど。
  4. コードにコメントをして自分なりに解釈しているが、コメントの理解で適切か。

私なりに調べてみましたが、Webにアクセスして動作させることで精いっぱいです。。FlaskやDockerを扱う方からするとかなり基本的なシステムかもしれませんが、上記の質問、何卒ご教授お願いいたします。

補足

ローカル環境のポート番号80(http://127.0.0.1:80)は、Windows IIS に利用されています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

なぜ docker-compose.yml > services > nginx-proxy > ports の" 5000:80 " の80をほかの数字に変更するとWebページにアクセスできなくなるのか

HTTP自体が、「何も指定しない時には80番ポートを使う」と決まっています。

投稿2023/06/07 18:16

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

J0KER

2023/06/08 04:53

回答ありがとうございます。 何も指定していないときには80番ポートを利用するということは、 ・docker-compose.yml > 各service の expose ・docker-compose.yml > nginx-proxy > ports の右側の数字 を一致させる必要があり、そこを変更すれば80番ポート以外でも接続ができるという認識であっているでしょうか?
maisumakun

2023/06/08 04:57

ブラウザに打ち込むアドレスにも、「http://1**.***.***.***:8080/」のようにポート番号を指定する必要があります。
J0KER

2023/06/08 05:26

・docker-compose.yml > 各service の expose を "8080" ・docker-compose.yml > nginx-proxy > ports を "5000:8080 " に変更しました。 そして、今まで表示されていたアドレスである" http://localhost:5000/***/service1 "を参考にブラウザのバーに、 "http://localhost:8080/***/service1/" や "http://1**.***.***:8080/" などと入力しましたが、「このページは動作しません」という表示になってしまい動作を確認できません。 どこがどこのポートを表しているかなどの認識が弱いので複数回の質問になってしまい申し訳ありません。 ・
maisumakun

2023/06/08 05:37 編集

nginxのポートを80から変える必要があります(これも何も書かないで80番となっています)。 (なぜ内側の80番ポートを変えたいのでしょうか? ローカルからアクセスするポートが80で、それを変えたいものと思っていました)
J0KER

2023/06/08 07:57 編集

maisumakunさんの説明から、 ホスト ↔ nginxコンテナ → service1,2,3コンテナ のような接続になっており、 ・ ホスト(ポート5000) ↔ nginxコンテナ(ポート80) ・ nginxコンテナ(ポート80) ↔ service1,2,3コンテナ(ポート80) でつながれているという認識なのですが、あっていますでしょうか?
maisumakun

2023/06/08 11:58

違います。service1,2,3は5000番ポートです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問