🐳

【Docker】ブラウザリクエストとレスポンスの流れ

に公開

ローカルのブラウザからDockerコンテナへのリクエストとレスポンスの流れ

ブラウザからアクセスする
http://localhost:8000/

ここで重要なのが、docker-compose.ymlファイル。

docker-compose.yml
version: '3.8'

  web:
    build: .
    container_name: web
    command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      - DEBUG=${DJANGO_DEBUG}
      - DATABASE_NAME=${DB_NAME}
      - DATABASE_USER=${DB_USER}
      - DATABASE_PASSWORD=${DB_PASSWORD}
      - DATABASE_HOST=${DB_HOST}
      - DATABASE_PORT=${DB_PORT}

その中でも特に重要な部分が以下の部分。

  # ローカルのアプリケーションフォルダをコンテナに共有する設定
    volumes:
      - .:/app
 # ローカルPCのポート8000にアクセスされたら、そのままコンテナの8000番ポートにリダイレクトしてくれる、という設定
    ports:
      - "8000:8000"
ボリューム(共有)イメージ図
ホストPC               コンテナ内
---------             ------------
web/ ─────────────▶ /app/ ← マウントポイント
イメージ図
[あなたのブラウザ] 
     ↓アクセス (localhost:8000)
[ローカルPCの8000番ポート]
     ↓ Dockerのポートマッピング
[コンテナの8000番ポート(Django runserver)][Djangoがレスポンス返す][ブラウザに結果が表示される🎉]

コンテナのポート8000にアクセスがあって以降の詳細

まずはurls.pyの確認が行われる

ブラウザからのアクセス
http://localhost:8000/
urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'), ← ここが呼び出される
    path('about/', views.about, name='about'),
]

マッチしたビュー関数(またはクラスベースビュー)が呼び出される

urls.py
path('', views.home, name='home'), ← 

Discussion