From: Yusuke Tamura <62091034+tamtam-fitness@users.noreply.github.com>
Date: Mon, 14 Aug 2023 09:12:14 +0000 (+0900)
Subject: 🌐 Update Japanese translation for `docs/ja/docs/deployment/docker.md` (#10073)
X-Git-Tag: 0.101.1~9
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d6ce823c1d498a00df8531b6c44da1200258f55;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Update Japanese translation for `docs/ja/docs/deployment/docker.md` (#10073)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
diff --git a/docs/ja/docs/deployment/docker.md b/docs/ja/docs/deployment/docker.md
index f10312b516..ca9dedc3c1 100644
--- a/docs/ja/docs/deployment/docker.md
+++ b/docs/ja/docs/deployment/docker.md
@@ -1,71 +1,157 @@
-# Dockerã使ç¨ãããããã¤
+# ã³ã³ããå
ã®FastAPI - Docker
-ãã®ã»ã¯ã·ã§ã³ã§ã¯ä»¥ä¸ã®ä½¿ãæ¹ã®ç´¹ä»ã¨ã¬ã¤ãã¸ã®ãªã³ã¯ã確èªã§ãã¾ã:
+FastAPIã¢ããªã±ã¼ã·ã§ã³ããããã¤ããå ´åãä¸è¬çãªã¢ããã¼ãã¯**Linuxã³ã³ããã»ã¤ã¡ã¼ã¸**ããã«ããããã¨ã§ãã
-* **5å**ç¨åº¦ã§ã**FastAPI** ã®ã¢ããªã±ã¼ã·ã§ã³ããããã©ã¼ãã³ã¹ãæå¤§éã«çºæ®ããDockerã¤ã¡ã¼ã¸ (ã³ã³ãã)ã«ããã
-* (ãªãã·ã§ã³) éçºè
ã¨ãã¦å¿
è¦ãªç¯å²ã§HTTPSãçè§£ããã
-* **20å**ç¨åº¦ã§ãèªåçãªHTTPSçæã¨ã¨ãã«Dockerã®Swarmã¢ã¼ã ã¯ã©ã¹ã¿ãã»ããã¢ãããã (æ5ãã«ã®ã·ã³ãã«ãªãµã¼ãã¼ä¸ã§)ã
-* **10å**ç¨åº¦ã§ãDockerã®Swarmã¢ã¼ã ã¯ã©ã¹ã¿ã使ã£ã¦ãHTTPSãªã©ã使ç¨ããå®å
¨ãª**FastAPI** ã¢ããªã±ã¼ã·ã§ã³ã®ä½æã¨ãããã¤ã
+åºæ¬çã«ã¯ **Docker**ãç¨ãã¦è¡ããã¾ããçæãããã³ã³ããã»ã¤ã¡ã¼ã¸ã¯ãããã¤ãã®æ¹æ³ã®ããããã§ãããã¤ã§ãã¾ãã
-ãããã¤ã®ããã«ã**Docker** ãå©ç¨ã§ãã¾ããã»ãã¥ãªãã£ãåç¾æ§ãéçºã®ã·ã³ãã«ããªã©ã«å©ç¹ãããã¾ãã
+Linuxã³ã³ããã®ä½¿ç¨ã«ã¯ã**ã»ãã¥ãªãã£**ã**å復å¯è½æ§ï¼ã¬ããªã«ããªãã£ï¼**ã**ã·ã³ããªã·ãã£**ãªã©ãããã¤ãã®å©ç¹ãããã¾ãã
-Dockerã使ãå ´åãå
¬å¼ã®Dockerã¤ã¡ã¼ã¸ãå©ç¨ã§ãã¾ã:
+!!! tip
+ TODO: ãªããé·ç§»ã§ããªã
+ ãæ¥ãã§ããã§ã«ãããã®æ
å ±ããåãã§ããï¼ [以ä¸ã®`Dockerfile`ã®ç®æð](#build-a-docker-image-for-fastapi)ã¸ã¸ã£ã³ããã¦ãã ããã
-## tiangolo/uvicorn-gunicorn-fastapi
+
+Dockerfile ãã¬ãã¥ã¼ ð
-ãã®ã¤ã¡ã¼ã¸ã¯ãèªåãã¥ã¼ãã³ã°ãæ©æ§ãå«ãã§ãã¾ããç ç²ãæããã¨ãªãããã ã³ã¼ããå ããã ãã§èªåçã«é«ããã©ã¼ãã³ã¹ãå®ç¾ã§ãã¾ãã
+```Dockerfile
+FROM python:3.9
-ãã ããç°å¢å¤æ°ãè¨å®ãã¡ã¤ã«ã使ã£ã¦å
¨ã¦ã®è¨å®ã®å¤æ´ãæ´æ°ãè¡ãã¾ãã
+WORKDIR /code
-!!! tip "è±ç¥è"
- å
¨ã¦ã®è¨å®ã¨ãªãã·ã§ã³ã確èªããã«ã¯ãDockerã¤ã¡ã¼ã¸ãã¼ã¸ãéãã¦ä¸ãã: tiangolo/uvicorn-gunicorn-fastapi.
+COPY ./requirements.txt /code/requirements.txt
-## `Dockerfile` ã®ä½æ
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
-* ããã¸ã§ã¯ããã£ã¬ã¯ããªã¸ç§»åã
-* 以ä¸ã®`Dockerfile` ã使:
+COPY ./app /code/app
-```Dockerfile
-FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
+CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
-COPY ./app /app
+# If running behind a proxy like Nginx or Traefik add --proxy-headers
+# CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--proxy-headers"]
```
-### ãã大ããªã¢ããªã±ã¼ã·ã§ã³
+
-[Bigger Applications with Multiple Files](tutorial/bigger-applications.md){.internal-link target=_blank} ã»ã¯ã·ã§ã³ã«å£ãå ´åã¯ã`Dockerfile` ã¯ä¸è¨ã®ä»£ããã«ã以ä¸ã®æ§ã«ãªãããããã¾ãã:
+## ã³ã³ããã¨ã¯ä½ã
-```Dockerfile
-FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
+ã³ã³ããï¼ä¸»ã«Linuxã³ã³ããï¼ã¯ãåãã·ã¹ãã å
ã®ä»ã®ã³ã³ããï¼ä»ã®ã¢ããªã±ã¼ã·ã§ã³ãã³ã³ãã¼ãã³ãï¼ããéé¢ãããç¶æ
ãä¿ã¡ãªããããã¹ã¦ã®ä¾åé¢ä¿ãå¿
è¦ãªãã¡ã¤ã«ãå«ãã¢ããªã±ã¼ã·ã§ã³ãããã±ã¼ã¸åããé常ã«**軽é**ãªæ¹æ³ã§ãã
-COPY ./app /app/app
-```
+Linuxã³ã³ããã¯ããã¹ãï¼ãã·ã³ãä»®æ³ãã·ã³ãã¯ã©ã¦ããµã¼ãã¼ãªã©ï¼ã®åãLinuxã«ã¼ãã«ã使ç¨ãã¦å®è¡ããã¾ããããã¯ãï¼OSå
¨ä½ãã¨ãã¥ã¬ã¼ãããå®å
¨ãªä»®æ³ãã·ã³ã¨æ¯ã¹ã¦ï¼é常ã«è»½éã§ãããã¨ãæå³ãã¾ãã
-### Raspberry Piãªã©ã®ã¢ã¼ããã¯ãã£
+ãã®ããã«ãã³ã³ããã¯**ãªã½ã¼ã¹ãã»ã¨ãã©æ¶è²»ãã¾ãã**ããããã»ã¹ãç´æ¥å®è¡ããã®ã«å¹æµããéã§ãï¼ä»®æ³ãã·ã³ã¯ãã£ã¨æ¶è²»ãã¾ãï¼ã
-Raspberry Pi (ARMããã»ããµæè¼)ããã以å¤ã®ã¢ã¼ããã¯ãã£ã§Dockerãä½åãã¦ããå ´åã(ãã«ãã¢ã¼ããã¯ãã£ã§ãã) Pythonãã¼ã¹ã¤ã¡ã¼ã¸ã使ã£ã¦ãä¸ãã`Dockerfile`ã使ããUvicornãåä½ã§ä½¿ç¨ã§ãã¾ãã
+ã³ã³ããã¯ã¾ããç¬èªã®**åé¢ããã**å®è¡ããã»ã¹ï¼é常ã¯1ã¤ã®ããã»ã¹ã®ã¿ï¼ãããã¡ã¤ã«ã·ã¹ãã ããããã¯ã¼ã¯ãæã¡ã¾ãã ãã®ãã¨ã¯ãããã¤ãã»ãã¥ãªãã£ãéçºãªã©ãç°¡ç´ åããã¾ãã
-ãã®å ´åã`Dockerfile` ã¯ä»¥ä¸ã®æ§ã«ãªãããããã¾ãã:
+## ã³ã³ããã»ã¤ã¡ã¼ã¸ã¨ã¯ä½ã
-```Dockerfile
-FROM python:3.7
+**ã³ã³ãã**ã¯ã**ã³ã³ããã»ã¤ã¡ã¼ã¸**ããå®è¡ããã¾ãã
-RUN pip install fastapi uvicorn
+ã³ã³ããã»ã¤ã¡ã¼ã¸ã¯ãã³ã³ããå
ã«åå¨ãã¹ããã¹ã¦ã®ãã¡ã¤ã«ãç°å¢å¤æ°ãããã¦ããã©ã«ãã®ã³ãã³ã/ããã°ã©ã ã**éçã«**ãã¼ã¸ã§ã³åãããã®ã§ãã ããã§ã®**éç**ã¨ã¯ãã³ã³ãã**ã¤ã¡ã¼ã¸**ã¯å®è¡ããã¦ããããããã±ã¼ã¸åããããã¡ã¤ã«ã¨ã¡ã¿ãã¼ã¿ã®ã¿ã§ãããã¨ãæå³ãã¾ãã
-EXPOSE 80
+ä¿åãããéçã³ã³ãã³ãã§ããã**ã³ã³ããã¤ã¡ã¼ã¸**ãã¨ã¯å¯¾ç
§çã«ãã**ã³ã³ãã**ãã¯é常ãå®è¡ä¸ã®ã¤ã³ã¹ã¿ã³ã¹ãã¤ã¾ã**å®è¡**ããã¦ãããã®ãæãã¾ãã
-COPY ./app /app
+**ã³ã³ãã**ãèµ·åããå®è¡ãããã¨ãï¼**ã³ã³ããã¤ã¡ã¼ã¸**ããèµ·åãããã¨ãï¼ããã¡ã¤ã«ãç°å¢å¤æ°ãªã©ã使ãããã夿´ããããããå¯è½æ§ãããã¾ãã
-CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
+ãããã®å¤æ´ã¯ãã®ã³ã³ããå
ã«ã®ã¿åå¨ãã¾ãããåºç¤ã¨ãªãã³ã³ããã»ã¤ã¡ã¼ã¸ã«ã¯æ®ãã¾ããï¼ãã£ã¹ã¯ã«ä¿åããã¾ããï¼ã
+
+ã³ã³ããã¤ã¡ã¼ã¸ã¯ **ããã°ã©ã ** ãã¡ã¤ã«ããã®å
容ãä¾ãã° `python` 㨠`main.py` ãã¡ã¤ã«ã«å¹æµãã¾ãã
+
+ããã¦ã**ã³ã³ãã**èªä½ã¯ï¼**ã³ã³ããã¤ã¡ã¼ã¸**ã¨ã¯å¯¾ç
§çã«ï¼ã¤ã¡ã¼ã¸ããã¨ã«ããå®éã®å®è¡ä¸ã®ã¤ã³ã¹ã¿ã³ã¹ã§ããã**ããã»ã¹**ã«å¹æµãã¾ãã
+
+å®éãã³ã³ãããå®è¡ããã¦ããã®ã¯ã**ããã»ã¹ãå®è¡ããã¦ãã**ã¨ãã ãã§ãï¼é常ã¯åä¸ã®ããã»ã¹ã ãã§ãï¼ã ã³ã³ããå
ã§å®è¡ä¸ã®ããã»ã¹ããªãå ´åãã³ã³ããã¯åæ¢ãã¾ãã
+
+## ã³ã³ããã»ã¤ã¡ã¼ã¸
+
+Dockerã¯ã**ã³ã³ããã»ã¤ã¡ã¼ã¸**ã¨**ã³ã³ãã**ã使ã»ç®¡çããããã®ä¸»è¦ãªãã¼ã«ã®1ã¤ã§ãã
+
+ããã¦ãDockerã«ã¯Dockerã¤ã¡ã¼ã¸ï¼ã³ã³ããï¼ãå
±æããDocker Hubã¨ãããã®ãããã¾ãã
+
+Docker Hub㯠å¤ãã®ãã¼ã«ãç°å¢ããã¼ã¿ãã¼ã¹ãã¢ããªã±ã¼ã·ã§ã³ã«å¯¾å¿ãã¦ããäºã使ããã**å
¬å¼ã®ã³ã³ããã»ã¤ã¡ã¼ã¸**ããããªãã¯ã«æä¾ãã¦ãã¾ãã
+
+ä¾ãã°ãå
¬å¼ã¤ã¡ã¼ã¸ã®1ã¤ã«Python Imageãããã¾ãã
+
+ãã®ä»ã«ãããã¼ã¿ãã¼ã¹ãªã©ãã¾ãã¾ãªã¤ã¡ã¼ã¸ãããã¾ãï¼
+
+* PostgreSQL
+* MySQL
+* MongoDB
+* Redis, etc.
+
+äºã使ãããã³ã³ããã»ã¤ã¡ã¼ã¸ã使ç¨ãããã¨ã§ãç°ãªããã¼ã«ã**çµã¿åããã¦**使ç¨ãããã¨ãé常ã«ç°¡åã«ãªãã¾ããä¾ãã°ãæ°ãããã¼ã¿ãã¼ã¹ã試ãå ´åã«ç¹ã«ä¾¿å©ã§ããã»ã¨ãã©ã®å ´åã**å
¬å¼ã¤ã¡ã¼ã¸**ã使ããç°å¢å¤æ°ã§è¨å®ããã ãã§è¯ãã§ãã
+
+ããããã°å¤ãã®å ´åãã³ã³ããã¨Dockerã«ã¤ãã¦å¦ã³ããã®ç¥èããã¾ãã¾ãªãã¼ã«ãã³ã³ãã¼ãã³ãã«ãã£ã¦åå©ç¨ãããã¨ãã§ãã¾ãã
+
+ã¤ã¾ãããã¼ã¿ãã¼ã¹ãPythonã¢ããªã±ã¼ã·ã§ã³ãReactããã³ãã¨ã³ãã»ã¢ããªã±ã¼ã·ã§ã³ãåããã¦ã§ãã»ãµã¼ãã¼ãªã©ããã¾ãã¾ãªãã®ã**è¤æ°ã®ã³ã³ãã**ã§å®è¡ããããããå
é¨ãããã¯ã¼ã¯çµç±ã§æ¥ç¶ãã¾ãã
+
+ãã¹ã¦ã®ã³ã³ãã管çã·ã¹ãã ï¼DockerãKubernetesãªã©ï¼ã«ã¯ããããããããã¯ã¼ãã³ã°æ©è½ãçµ±åããã¦ãã¾ãã
+
+## ã³ã³ããã¨ããã»ã¹
+
+é常ã**ã³ã³ããã»ã¤ã¡ã¼ã¸**ã¯ãã®ã¡ã¿ãã¼ã¿ã«**ã³ã³ãã**ã®èµ·åæã«å®è¡ãããããã©ã«ãã®ããã°ã©ã ã¾ãã¯ã³ãã³ãã¨ããã®ããã°ã©ã ã«æ¸¡ããããã©ã¡ã¼ã¿ãå«ã¿ã¾ããã³ãã³ãã©ã¤ã³ã§ã®æä½ã¨ããä¼¼ã¦ãã¾ãã
+
+**ã³ã³ãã**ãèµ·åãããã¨ããã®ã³ãã³ã/ããã°ã©ã ãå®è¡ããã¾ãï¼ãã ããå¥ã®ã³ãã³ã/ããã°ã©ã ããªã¼ãã¼ã©ã¤ããã¦å®è¡ããããã¨ãã§ãã¾ãï¼ã
+
+ã³ã³ããã¯ã**ã¡ã¤ã³ã»ããã»ã¹**ï¼ã³ãã³ãã¾ãã¯ããã°ã©ã ï¼ãå®è¡ããã¦ããéãå®è¡ããã¾ãã
+
+ã³ã³ããã¯é常**1ã¤ã®ããã»ã¹**ãæã¡ã¾ãããã¡ã¤ã³ã»ããã»ã¹ãããµãã»ããã»ã¹ãèµ·åãããã¨ãå¯è½ã§ãããããã°åãã³ã³ããå
ã«**è¤æ°ã®ããã»ã¹**ãæã¤ãã¨ã«ãªãã¾ãã
+
+ãããã**å°ãªãã¨ã1ã¤ã®å®è¡ä¸ã®ããã»ã¹**ããªããã°ãå®è¡ä¸ã®ã³ã³ãããæã¤ãã¨ã¯ã§ããªãã§ããã¡ã¤ã³ã»ããã»ã¹ã忢ããã°ãã³ã³ããã忢ãã¾ãã
+
+## Build a Docker Image for FastAPI
+
+ã¨ãããã¨ã§ãä½ãä½ãã¾ãããï¼ð
+
+FastAPIç¨ã®**Dockerã¤ã¡ã¼ã¸**ãã**å
¬å¼Python**ã¤ã¡ã¼ã¸ã«åºã¥ãã¦**ã¼ããã**ãã«ãããæ¹æ³ããè¦ããã¾ãã
+
+ããã¯**ã»ã¨ãã©ã®å ´å**ã«ãããããã¨ã§ããä¾ãã°ï¼
+
+* **Kubernetes**ã¾ãã¯åæ§ã®ãã¼ã«ã使ç¨ããå ´å
+* **Raspberry Pi**ã§å®è¡ããå ´å
+* ã³ã³ããã»ã¤ã¡ã¼ã¸ãå®è¡ãã¦ãããã¯ã©ã¦ãã»ãµã¼ãã¹ãªã©ãå©ç¨ããå ´å
+
+### ããã±ã¼ã¸è¦ä»¶ï¼package requirementsï¼
+
+ã¢ããªã±ã¼ã·ã§ã³ã®**ããã±ã¼ã¸è¦ä»¶**ã¯é常ãä½ããã®ãã¡ã¤ã«ã«è¨è¿°ããã¦ããã¯ãã§ãã
+
+ããã±ã¼ã¸è¦ä»¶ã¯ä¸»ã«**ã¤ã³ã¹ãã¼ã«**ããããã«ä½¿ç¨ãããã¼ã«ã«ä¾åããã§ãããã
+
+æãä¸è¬çãªæ¹æ³ã¯ã`requirements.txt` ãã¡ã¤ã«ã«ããã±ã¼ã¸åã¨ãã®ãã¼ã¸ã§ã³ã 1 è¡ãã¤æ¸ããã¨ã§ãã
+
+ãã¡ããã[FastAPI ãã¼ã¸ã§ã³ã«ã¤ãã¦](./versions.md){.internal-link target=_blank}ã§èªãã ã®ã¨åãã¢ã¤ãã¢ã使ç¨ãã¦ããã¼ã¸ã§ã³ã®ç¯å²ãè¨å®ãã¾ãã
+
+ä¾ãã°ã`requirements.txt` ã¯æ¬¡ã®ããã«ãªãã¾ãï¼
+
+```
+fastapi>=0.68.0,<0.69.0
+pydantic>=1.8.0,<2.0.0
+uvicorn>=0.15.0,<0.16.0
```
-## **FastAPI** ã³ã¼ãã®ä½æ
+ããã¦é常ãä¾ãã° `pip` ã使ã£ã¦ãããã®ããã±ã¼ã¸ã®ä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ãã¾ãï¼
+
+
-* `app` ãã£ã¬ã¯ããªã使ããç§»åã
-* 以ä¸ã®`main.py` ãã¡ã¤ã«ã使:
+```console
+$ pip install -r requirements.txt
+---> 100%
+Successfully installed fastapi pydantic uvicorn
+```
+
+
+
+!!! info
+ ããã±ã¼ã¸ã®ä¾åé¢ä¿ãå®ç¾©ãã¤ã³ã¹ãã¼ã«ããããã®ãã©ã¼ãããããã¼ã«ã¯ä»ã«ãããã¾ãã
+
+ Poetryã使ã£ãä¾ã¯ãå¾è¿°ããã»ã¯ã·ã§ã³ã§ãç´¹ä»ãã¾ããð
+
+### **FastAPI**ã³ã¼ãã使ãã
+
+* `app` ãã£ã¬ã¯ããªã使ãããã®ä¸ã«å
¥ãã¾ã
+* 空ã®ãã¡ã¤ã« `__init__.py` ã使ãã¾ã
+* `main.py` ãã¡ã¤ã«ã使ãã¾ãï¼
```Python
-from typing import Optional
+from typing import Union
from fastapi import FastAPI
@@ -78,23 +164,136 @@ def read_root():
@app.get("/items/{item_id}")
-def read_item(item_id: int, q: Optional[str] = None):
+def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
```
-* ããã§ã¯ã以ä¸ã®æ§ãªãã£ã¬ã¯ããªæ§é ã«ãªã£ã¦ããã¯ãã§ã:
+### Dockerfile
+
+åãããã¸ã§ã¯ãã»ãã£ã¬ã¯ããªã«`Dockerfile`ã¨ãããã¡ã¤ã«ã使ãã¾ãï¼
+
+```{ .dockerfile .annotate }
+# (1)
+FROM python:3.9
+
+# (2)
+WORKDIR /code
+
+# (3)
+COPY ./requirements.txt /code/requirements.txt
+
+# (4)
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
+
+# (5)
+COPY ./app /code/app
+
+# (6)
+CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
+```
+
+1. å
¬å¼ã®Pythonãã¼ã¹ã¤ã¡ã¼ã¸ããå§ãã¾ã
+
+2. ç¾å¨ã®ä½æ¥ãã£ã¬ã¯ããªã `/code` ã«è¨å®ãã¾ã
+
+ ããã« `requirements.txt` ãã¡ã¤ã«ã¨ `app` ãã£ã¬ã¯ããªãç½®ãã¾ãã
+
+3. è¦ä»¶ãæ¸ããããã¡ã¤ã«ã `/code` ãã£ã¬ã¯ããªã«ã³ãã¼ãã¾ã
+
+ æ®ãã®ã³ã¼ãã§ã¯ãªããæåã«å¿
è¦ãªãã¡ã¤ã«ã ããã³ãã¼ãã¦ãã ããã
+
+ ãã®ãã¡ã¤ã«ã¯**é »ç¹ã«ã¯å¤æ´ãããªã**ã®ã§ãDockerã¯ãã®ã¹ãããã§ã¯ãããæ¤ç¥ã**ãã£ãã·ã¥**ã使ç¨ããæ¬¡ã®ã¹ãããã§ããã£ãã·ã¥ãæå¹ã«ãã¾ãã
+
+4. è¦ä»¶ãã¡ã¤ã«ã«ããããã±ã¼ã¸ã®ä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ãã¾ã
+ `--no-cache-dir` ãªãã·ã§ã³ã¯ãã¦ã³ãã¼ãããããã±ã¼ã¸ããã¼ã«ã«ã«ä¿åããªãããã« `pip` ã«æç¤ºãã¾ããããã¯ãåãããã±ã¼ã¸ãã¤ã³ã¹ãã¼ã«ããããã« `pip` ãå度å®è¡ããå ´åã«ã®ã¿æå¹ã§ãããã³ã³ããã§ä½æ¥ããå ´åã¯ããã§ã¯ãªãã§ãã
+
+ !!! note
+ `--no-cache-dir`ã¯`pip`ã«é¢é£ãã¦ããã ãã§ãDockerãã³ã³ããã¨ã¯ä½ã®é¢ä¿ããªãã§ãã
+
+ `--upgrade` ãªãã·ã§ã³ã¯ãããã±ã¼ã¸ãæ¢ã«ã¤ã³ã¹ãã¼ã«ããã¦ããå ´åã`pip` ã«ã¢ããã°ã¬ã¼ãããããã«æç¤ºãã¾ãã
+
+ 使
ãªããã¡ã¤ã«ãã³ãã¼ããåã®ã¹ãããã¯**Dockerãã£ãã·ã¥**ã«ãã£ã¦æ¤åºãããå¯è½æ§ãããããã§ããããã®ã¹ããããå©ç¨å¯è½ãªå ´åã¯**Dockerãã£ãã·ã¥**ã使ç¨ãã¾ãã
+
+ ãã®ã¹ãããã§ãã£ãã·ã¥ã使ç¨ããã¨ãéçºä¸ã«ã¤ã¡ã¼ã¸ãä½åº¦ããã«ãããéã«ã**æ¯å**ãã¹ã¦ã®ä¾åé¢ä¿ã**ãã¦ã³ãã¼ããã¦ã¤ã³ã¹ãã¼ã«ãã**代ããã«å¤ãã®**æé**ã**ç¯ç´**ã§ãã¾ãã
+
+5. ./app` ãã£ã¬ã¯ããªã `/code` ãã£ã¬ã¯ããªã®ä¸ã«ã³ãã¼ããã
+
+ ããã«ã¯**æãé »ç¹ã«å¤æ´ããã**ãã¹ã¦ã®ã³ã¼ããå«ã¾ãã¦ãããããDockerã®**ãã£ãã·ã¥**ã¯**ãã以éã®ã¹ããã**ã«ç°¡åã«ä½¿ç¨ããããã¨ã¯ããã¾ããã
+
+ ãã®ãããã³ã³ããã¤ã¡ã¼ã¸ã®ãã«ãæéãæé©åããããã«ã`Dockerfile`ã® **æå¾** ã«ãããç½®ããã¨ãéè¦ã§ãã
+
+6. `uvicorn`ãµã¼ãã¼ãå®è¡ããããã®**ã³ãã³ã**ãè¨å®ãã¾ã
+
+ `CMD` ã¯æååã®ãªã¹ããåããããããã®æååã¯ã¹ãã¼ã¹ã§åºåãããã³ãã³ãã©ã¤ã³ã«å
¥åãããã®ã§ãã
+
+ ãã®ã³ãã³ã㯠**ç¾å¨ã®ä½æ¥ãã£ã¬ã¯ããª**ããå®è¡ãããä¸è¨ã® `WORKDIR /code` ã«ã¦è¨å®ãã `/code` ãã£ã¬ã¯ããªã¨åãã§ãã
+
+ ãã®ããããã°ã©ã 㯠`/code` ã§éå§ããã®ä¸ã«ããªãã®ã³ã¼ãããã `./app` ãã£ã¬ã¯ããªãããã®ã§ã**Uvicorn** 㯠`app.main` ãã `app` ãåç
§ãã**ã¤ã³ãã¼ã** ãããã¨ãã§ãã¾ãã
+
+!!! tip
+ ã³ã¼ãå
ã®"+"ã®å¹ãåºããã¯ãªãã¯ãã¦ãåè¡ãä½ãããã®ããã¬ãã¥ã¼ãã¦ãã ãããð
+
+ããã§ã次ã®ãããªãã£ã¬ã¯ããªæ§é ã«ãªãã¯ãã§ãï¼
```
.
âââ app
+â  âââ __init__.py
â âââ main.py
-âââ Dockerfile
+âââ Dockerfile
+âââ requirements.txt
+```
+
+#### TLS Termination Proxyã®è£å´
+
+Nginx ã Traefik ã®ãã㪠TLS Termination Proxy (ãã¼ããã©ã³ãµ) ã®å¾ãã§ã³ã³ãããåããã¦ããå ´åã¯ã`--proxy-headers`ãªãã·ã§ã³ã追å ãã¾ãã
+
+ãã®ãªãã·ã§ã³ã¯ãUvicornã«ãããã·çµç±ã§HTTPSã§åä½ãã¦ããã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦ãéä¿¡ãããããããä¿¡é ¼ããããæç¤ºãã¾ãã
+
+```Dockerfile
+CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
+```
+
+#### Dockerãã£ãã·ã¥
+
+ãã®`Dockerfile`ã«ã¯éè¦ãªããªãã¯ããããã¾ã**ä¾åé¢ä¿ã ãã®ãã¡ã¤ã«**ãã³ãã¼ãã¾ãããã®çç±ã説æãã¾ãã
+
+```Dockerfile
+COPY ./requirements.txt /code/requirements.txt
+```
+
+Dockerãä»ã®ãã¼ã«ã¯ããããã®ã³ã³ããã¤ã¡ã¼ã¸ã**段éçã«**ãã«ããã**1ã¤ã®ã¬ã¤ã¤ã¼ãä»ã®ã¬ã¤ã¤ã¼ã®ä¸ã«**追å ãã¾ãã`Dockerfile`ã®å
é ããéå§ãã`Dockerfile`ã®åå½ä»¤ã«ãã£ã¦ä½æããããã¡ã¤ã«ã追å ãã¦ããã¾ãã
+
+Dockerãåæ§ã®ãã¼ã«ã¯ãã¤ã¡ã¼ã¸ããã«ãããéã«**å
é¨ãã£ãã·ã¥**ã使ç¨ãã¾ããååã³ã³ããã¤ã¡ã¼ã¸ãæ§ç¯ããã¨ããããã¡ã¤ã«ã夿´ããã¦ããªãå ´åããã¡ã¤ã«ãå度ã³ãã¼ãã¦ã¼ãããæ°ããã¬ã¤ã¤ã¼ã使ãã代ããã«ã**åå使ããåãã¬ã¤ã¤ã¼ãåå©ç¨**ãã¾ãã
+
+ãã ãã¡ã¤ã«ã®ã³ãã¼ãé¿ããã ãã§ã¯ãã¾ãæ¹åããã¾ãããããã®ã¹ãããã§ãã£ãã·ã¥ãå©ç¨ããããã**次ã®ã¹ããã**ã§ãã£ãã·ã¥ã使ããã¨ãã§ãã¾ãã
+
+ä¾ãã°ãä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ããå½ä»¤ã®ããã«ãã£ãã·ã¥ã使ããã¨ãã§ãã¾ãï¼
+
+```Dockerfile
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
```
-## Dockerã¤ã¡ã¼ã¸ããã«ã
+ããã±ã¼ã¸è¦ä»¶ã®ãã¡ã¤ã«ã¯**é »ç¹ã«å¤æ´ããããã¨ã¯ããã¾ãã**ããã®ããããã®ãã¡ã¤ã«ã ããã³ãã¼ãããã¨ã§ãDockerã¯ãã®ã¹ãããã§ã¯**ãã£ãã·ã¥**ã使ç¨ãããã¨ãã§ãã¾ãã
+
+ããã¦ãDockerã¯**次ã®ã¹ãããã®ããã«ãã£ãã·ã¥**ã使ç¨ãããããã®ä¾åé¢ä¿ããã¦ã³ãã¼ããã¦ã¤ã³ã¹ãã¼ã«ãããã¨ãã§ãã¾ããããã¦ãããã§**å¤ãã®æéãç¯ç´**ãã¾ãã⨠...ããã¦éå±ãªå¾
ã¡æéãé¿ãããã¨ãã§ãã¾ããðªð
+
+ããã±ã¼ã¸ã®ä¾åé¢ä¿ããã¦ã³ãã¼ããã¦ã¤ã³ã¹ãã¼ã«ããã«ã¯**æ°å**ãããã¾ããã**ãã£ãã·ã¥**ã使ãã°**ããããæ°ç§**ã§ãã
-* ããã¸ã§ã¯ããã£ã¬ã¯ã㪠(`app` ãã£ã¬ã¯ããªãå«ãã ã`Dockerfile` ã®ããå ´æ) ã¸ç§»å
-* FastAPIã¤ã¡ã¼ã¸ã®ãã«ã:
+å ãã¦ãéçºä¸ã«ã³ã³ããã»ã¤ã¡ã¼ã¸ãä½åº¦ããã«ããã¦ãã³ã¼ãã®å¤æ´ãæ©è½ãã¦ãããã©ããããã§ãã¯ãããã¨ã«ãªããããå¤ãã®æéãç¯ç´ãããã¨ãã§ãã¾ãã
+
+ããã¦`Dockerfile`ã®æçµè¡ã®è¿ãã§ãã¹ã¦ã®ã³ã¼ããã³ãã¼ãã¾ãããã®çç±ã¯ã**æãé »ç¹ã«**夿´ããããã®ãªã®ã§ããã®ã¹ãããã®å¾ã«ãããã®ã¯ã»ã¨ãã©ãã£ãã·ã¥ã使ç¨ãããã¨ãã§ããªãã®ããã§ãã
+
+```Dockerfile
+COPY ./app /code/app
+```
+
+### Dockerã¤ã¡ã¼ã¸ããã«ããã
+
+ãã¹ã¦ã®ãã¡ã¤ã«ãæã£ãã®ã§ãã³ã³ããã»ã¤ã¡ã¼ã¸ããã«ããã¾ãããã
+
+* ããã¸ã§ã¯ããã£ã¬ã¯ããªã«ç§»åãã¾ãï¼`Dockerfile`ãããå ´æã§ã`app`ãã£ã¬ã¯ããªãããã¾ãï¼
+* FastAPI ã¤ã¡ã¼ã¸ããã«ããã¾ãï¼
@@ -106,9 +305,14 @@ $ docker build -t myimage .
-## Dockerã³ã³ãããèµ·å
+!!! tip
+ æ«å°¾ã® `.` ã«æ³¨ç®ãã¦ã»ããã§ãããã㯠`./` ã¨åãæå³ã§ãã ããã¯Dockerã«ã³ã³ããã¤ã¡ã¼ã¸ã®ãã«ãã«ä½¿ç¨ãããã£ã¬ã¯ããªãæç¤ºãã¾ãã
+
+ ãã®å ´åãåãã«ã¬ã³ãã»ãã£ã¬ã¯ããª(`.`)ã§ãã
-* ç¨æããã¤ã¡ã¼ã¸ãåºã«ããã³ã³ããã®èµ·å:
+### Dockerã³ã³ããã®èµ·åãã
+
+* ã¤ã¡ã¼ã¸ã«åºã¥ãã¦ã³ã³ãããå®è¡ãã¾ãï¼
@@ -118,62 +322,394 @@ $ docker run -d --name mycontainer -p 80:80 myimage
-ããã§ãDockerã³ã³ããå
ã«æé©åãããFastAPIãµã¼ããåä½ãã¦ãã¾ãã使ç¨ãã¦ãããµã¼ã (ããã¦CPUã³ã¢æ°) ã«æ²¿ã£ãèªåãã¥ã¼ãã³ã°ãè¡ããã¦ãã¾ãã
-
-## 確èª
+## 確èªãã
-Dockerã³ã³ããã®URLã§ç¢ºèªã§ããã¯ãã§ããä¾ãã°: http://192.168.99.100/items/5?q=somequery ã http://127.0.0.1/items/5?q=somequery (ãããã¯Dockerãã¹ãã使ç¨ãããããã¨åçã®ãã®)ã
+Dockerã³ã³ããã®http://192.168.99.100/items/5?q=somequery ã http://127.0.0.1/items/5?q=somequery (ã¾ãã¯ããã«ç¸å½ããDockerãã¹ãã使ç¨ãããã®ï¼ã¨ãã£ãURLã§ç¢ºèªã§ããã¯ãã§ãã
-以ä¸ã®æ§ãªãã®ãè¿ããã¾ã:
+ã¢ã¯ã»ã¹ããã¨ä»¥ä¸ã®ãããªãã®ã表示ããã¾ãï¼
```JSON
{"item_id": 5, "q": "somequery"}
```
-## 対話çAPIããã¥ã¡ã³ã
+## ã¤ã³ã¿ã©ã¯ãã£ããªAPIããã¥ã¡ã³ã
-ããã§ãhttp://192.168.99.100/docs ã http://127.0.0.1/docs (ãããã¯Dockerãã¹ãã使ç¨ãããããã¨åçã®ãã®) ãéãã¦ä¸ããã
+ãããã®URLã«ãã¢ã¯ã»ã¹ã§ãã¾ã: http://192.168.99.100/docs ã http://127.0.0.1/docs (ã¾ãã¯ããã«ç¸å½ããDockerãã¹ãã使ç¨ãããã®ï¼
-èªåçæããã対話çAPIããã¥ã¡ã³ãã確èªã§ãã¾ã (Swagger UIã«ãã£ã¦æä¾ããã¾ã):
+ã¢ã¯ã»ã¹ããã¨ãèªå対話åAPIããã¥ã¡ã³ãï¼Swagger UIãæä¾ï¼ã表示ããã¾ãï¼

-## ãã®ä»ã®APIããã¥ã¡ã³ã
+## 代æ¿ã®APIããã¥ã¡ã³ã
-ã¾ãåæ§ã«ãhttp://192.168.99.100/redoc ã http://127.0.0.1/redoc (ãããã¯Dockerãã¹ãã使ç¨ãããããã¨åçã®ãã®) ãéãã¦ä¸ããã
+ã¾ããhttp://192.168.99.100/redoc ã http://127.0.0.1/redoc (ã¾ãã¯ããã«ç¸å½ããDockerãã¹ãã使ç¨ãããã®ï¼ã«ãã¢ã¯ã»ã¹ã§ãã¾ãã
-ä»ã®èªåçæããã対話çãªAPIããã¥ã¡ã³ãã確èªã§ãã¾ã (ReDocã«ãã£ã¦æä¾ããã¾ã):
+代æ¿ã®èªåããã¥ã¡ã³ãï¼ReDocã«ãã£ã¦æä¾ãããï¼ã表示ããã¾ãï¼

-## Traefik
+## åä¸ãã¡ã¤ã«ã®FastAPIã§Dockerã¤ã¡ã¼ã¸ããã«ããã
+
+FastAPI ãåä¸ã®ãã¡ã¤ã«ãä¾ãã° `./app` ãã£ã¬ã¯ããªã®ãªã `main.py` ã®å ´åããã¡ã¤ã«æ§é ã¯æ¬¡ã®ããã«ãªãã¾ãï¼
+```
+.
+âââ Dockerfile
+âââ main.py
+âââ requirements.txt
+```
+
+ããããã°ã`Dockerfile`ã®ä¸ã«ãã¡ã¤ã«ãã³ãã¼ããããã«ã対å¿ãããã¹ã夿´ããã ãã§ããã§ãï¼
+
+```{ .dockerfile .annotate hl_lines="10 13" }
+FROM python:3.9
+
+WORKDIR /code
+
+COPY ./requirements.txt /code/requirements.txt
+
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
+
+# (1)
+COPY ./main.py /code/
+
+# (2)
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
+```
+
+1. main.py`ãã¡ã¤ã«ã `/code` ãã£ã¬ã¯ããªã«ç´æ¥ã³ãã¼ãã¾ãã
+
+2. Uvicornãå®è¡ãã`main`ãã`app`ãªãã¸ã§ã¯ããã¤ã³ãã¼ãããããã«æç¤ºãã¾ãï¼`app.main`ããã¤ã³ãã¼ãããã®ã§ã¯ãªãï¼ã
+
+次ã«Uvicornã³ãã³ãã調æ´ãã¦ã`app.main` ã®ä»£ããã«æ°ããã¢ã¸ã¥ã¼ã« `main` ã使ç¨ããFastAPIãªãã¸ã§ã¯ãã§ãã `app` ãã¤ã³ãã¼ããã¾ãã
+
+## ãããã¤ã¡ã³ãã®ã³ã³ã»ãã
+
+ã³ã³ããã¨ãã観ç¹ããã[ãããã¤ã®ã³ã³ã»ãã](./concepts.md){.internal-link target=_blank}ã«å
±éããããã¤ãã«ã¤ãã¦ãããä¸åº¦èª¬æãã¾ãããã
+
+ã³ã³ããã¯ä¸»ã«ãã¢ããªã±ã¼ã·ã§ã³ã®**ãã«ãã¨ãããã¤**ã®ããã»ã¹ãç°¡ç´ åããããã®ãã¼ã«ã§ããããããã®**ãããã¤ã®ã³ã³ã»ãã**ãæ±ãããã®ç¹å®ã®ã¢ããã¼ããå¼·å¶ãããã®ã§ã¯ãªãã§ãã
-Traefikã¯ã髿§è½ãªãªãã¼ã¹ãããã·/ãã¼ããã©ã³ãµã¼ã§ãããTLSã¿ã¼ããã¼ã·ã§ã³ãããã·ãã¸ã§ããå®è¡ã§ãã¾ãï¼ä»ã®æ©è½ã¨åãé¢ãã¦ï¼ã
+**è¯ããã¥ã¼ã¹**ã¯ãããããã®ç°ãªãæ¦ç¥ã«ã¯ããã¹ã¦ã®ãããã¤ã¡ã³ãã®ã³ã³ã»ãããã«ãã¼ããæ¹æ³ãããã¨ãããã¨ã§ããð
-Let's Encryptã¨çµ±åããã¦ãã¾ãããã®ãããè¨¼ææ¸ã®åå¾ã¨æ´æ°ãå«ãHTTPSã«é¢ãããã¹ã¦ã®å¦çãå®è¡ã§ãã¾ãã
+ãããã®**ãããã¤ã¡ã³ãã®ã³ã³ã»ãã**ãã³ã³ããã®è¦³ç¹ããè¦ç´ãã¦ã¿ã¾ãããï¼
-ã¾ããDockerã¨ãçµ±åããã¦ãã¾ãããããã£ã¦ãåã¢ããªã±ã¼ã·ã§ã³æ§æã§ãã¡ã¤ã³ã宣è¨ãããããã®æ§æãèªã¿åã£ã¦ãHTTPSè¨¼ææ¸ãçæããæ§æã«å¤æ´ãå ãããã¨ãªããã¢ããªã±ã¼ã·ã§ã³ã«HTTPSãèªåçã«æä¾ã§ãã¾ãã
+* ã»ãã¥ãªã㣠- HTTPS
+* èµ·åæã®å®è¡
+* åèµ·å
+* **ã¬ããªã±ã¼ã·ã§ã³ï¼å®è¡ä¸ã®ããã»ã¹æ°ï¼**
+* ã¡ã¢ãª
+* éå§åã®äºåã¹ããã
+
+## HTTPS
+
+FastAPI ã¢ããªã±ã¼ã·ã§ã³ã® **ã³ã³ããã»ã¤ã¡ã¼ã¸**ï¼ããã³å¾ã§å®è¡ä¸ã® **ã³ã³ãã**ï¼ã ãã«ç¦ç¹ãå½ã¦ãã¨ãé常ãHTTPSã¯å¥ã®ãã¼ã«ãç¨ãã¦**å¤é¨ã§**å¦çããã¾ãã
+
+ä¾ãã°Traefikã®ããã«ã**HTTPS**ã¨**è¨¼ææ¸**ã®**èªå**åå¾ãæ±ãå¥ã®ã³ã³ããã§ããå¯è½æ§ãããã¾ãã
+
+!!! tip
+ Traefikã¯DockerãKubernetesãªã©ã¨çµ±åããã¦ããã®ã§ãã³ã³ããç¨ã®HTTPSã®è¨å®ãæ§æã¯ã¨ã¦ãç°¡åã§ãã
+
+ãããã¯ãï¼ã³ã³ããå
ã§ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ããªããï¼ã¯ã©ã¦ãã»ãããã¤ãã¼ããµã¼ãã¹ã®1ã¤ã¨ãã¦HTTPSãå¦çãããã¨ãã§ãã¾ãã
+
+## èµ·åæããã³åèµ·åæã®å®è¡
+
+é常ãã³ã³ããã®**èµ·åã¨å®è¡**ãæ
å½ããå¥ã®ãã¼ã«ãããã¾ãã
+
+ããã¯ç´æ¥**Docker**ã§ãã£ããã**Docker Compose**ã§ãã£ããã**Kubernetes**ã§ãã£ããã**ã¯ã©ã¦ããµã¼ãã¹**ã§ãã£ãããã¾ãã
+
+ã»ã¨ãã©ã®å ´åï¼ã¾ãã¯ãã¹ã¦ã®å ´åï¼ãèµ·åæã«ã³ã³ãããå®è¡ãã失ææã«åèµ·åãæå¹ã«ããç°¡åãªãªãã·ã§ã³ãããã¾ããä¾ãã°Dockerã§ã¯ãã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ã®`--restart`ã該å½ãã¾ãã
+
+ã³ã³ããã使ããªããã°ãã¢ããªã±ã¼ã·ã§ã³ãèµ·åæãåèµ·åæã«å®è¡ãããã®ã¯é¢åã§é£ããããããã¾ããããããã**ã³ã³ãã**ã§ä½æ¥ããå ´åãã»ã¨ãã©ã®ã±ã¼ã¹ã§ãã®æ©è½ã¯ããã©ã«ãã§å«ã¾ãã¦ãã¾ããâ¨
+
+## ã¬ããªã±ã¼ã·ã§ã³ - ããã»ã¹æ°
+
+**Kubernetes** ã Docker Swarm ã¢ã¼ããNomadããããã¯è¤æ°ã®ãã·ã³ä¸ã§åæ£ã³ã³ããã管çããããã®åæ§ã®è¤éãªã·ã¹ãã ã使ã£ã¦ãã·ã³ã®ã¯ã©ã¹ã¿ã¼ãæ§æãã¦ããå ´åã åã³ã³ããã§ï¼Workerãæã¤Gunicornã®ãããªï¼**ããã»ã¹ããã¼ã¸ã£**ã使ç¨ãã代ããã«ã**ã¯ã©ã¹ã¿ã¼ã»ã¬ãã«**ã§**ã¬ããªã±ã¼ã·ã§ã³**ãå¦çãããã¨æãã§ãããã
+
+Kubernetesã®ãããªåæ£ã³ã³ãã管çã·ã¹ãã ã®1ã¤ã¯é常ãå
¥ã£ã¦ãããªã¯ã¨ã¹ãã®**ãã¼ããã©ã³ã·ã³ã°**ããµãã¼ãããªããã**ã³ã³ããã®ã¬ããªã±ã¼ã·ã§ã³**ãå¦çããçµ±åãããæ¹æ³ãæã£ã¦ãã¾ãããã®ãã¨ã¯ãã¹ã¦**ã¯ã©ã¹ã¿ã¬ãã«**ã«ã¦ã§ãã
+
+ãã®ãããªå ´åãUvicornã¯ã¼ã«ã¼ã§Gunicornã®ãããªãã®ãå®è¡ããã®ã§ã¯ãªãã[ä¸è¨ã®èª¬æ](#dockerfile)ã®ããã«**Dockerã¤ã¡ã¼ã¸ãã¼ããã**ãã«ãããä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ãã¦ã**åä¸ã®Uvicornããã»ã¹**ãå®è¡ãããã§ãããã
+
+### ãã¼ããã©ã³ãµã¼
+
+ã³ã³ããã使ç¨ããå ´åãé常ã¯ã¡ã¤ã³ã»ãã¼ã**ã§ãªã¹ãã³ã°**ãã¦ããã³ã³ãã¼ãã³ããããã¯ãã§ããããã¯ããããã**HTTPS**ãå¦çããããã®**TLS Termination Proxy**ã§ãããå¥ã®ã³ã³ããã§ãã£ãããåæ§ã®ãã¼ã«ã§ãã£ããããã§ãããã
+
+ãã®ã³ã³ãã¼ãã³ãã¯ãªã¯ã¨ã¹ãã® **è² è·** ãåãã (ãã¾ãããã°) ãã®è² è·ã**ãã©ã³ã¹ãã** ã¯ã¼ã«ã¼ã«åé
ããã®ã§ãä¸è¬ã« **ãã¼ããã©ã³ãµ** ã¨ãå¼ã°ãã¾ãã
+
+!!! tip
+ããHTTPSã«ä½¿ããããã®ã¨åã**TLS Termination Proxy**ã³ã³ãã¼ãã³ãã¯ããããã**ãã¼ããã©ã³ãµã¼**ã«ããªãã§ãããã
+
+ããã¦ã³ã³ããã§ä½æ¥ããå ´åãã³ã³ããã®èµ·åã¨ç®¡çã«ä½¿ç¨ããåãã·ã¹ãã ã«ã¯ã**ãã¼ããã©ã³ãµã¼**ï¼**TLS Termination Proxy**ã®å¯è½æ§ãããï¼ãã**ãããã¯ã¼ã¯éä¿¡**ï¼HTTPãªã¯ã¨ã¹ããªã©ï¼ãã¢ããªã®ããã³ã³ããï¼è¤æ°å¯ï¼ã«éä¿¡ããããã®å
é¨ãã¼ã«ãæ¢ã«ããã¯ãã§ãã
+
+### 1ã¤ã®ãã¼ããã©ã³ãµã¼ - è¤æ°ã®ã¯ã¼ã«ã¼ã³ã³ããã¼
+
+**Kubernetes**ãåæ§ã®åæ£ã³ã³ãã管çã·ã¹ãã ã§ä½æ¥ããå ´åããã®å
é¨ã®ãããã¯ã¼ãã³ã°ã®ã¡ã«ããºã ã使ç¨ãããã¨ã§ãã¡ã¤ã³ã®**ãã¼ã**ã§ãªãã¹ã³ãã¦ããåä¸ã®**ãã¼ããã©ã³ãµã¼**ããã¢ããªãå®è¡ãã¦ããå¯è½æ§ã®ãã**è¤æ°ã®ã³ã³ãã**ã«éä¿¡ï¼ãªã¯ã¨ã¹ãï¼ãéä¿¡ã§ããããã«ãªãã¾ãã
+
+ã¢ããªãå®è¡ãããããã®ã³ã³ããã«ã¯ãé常**1ã¤ã®ããã»ã¹**ï¼ãã¨ãã°ãFastAPIã¢ããªã±ã¼ã·ã§ã³ãå®è¡ããUvicornããã»ã¹ï¼ãããã¾ãããããã¯ãã¹ã¦**åä¸ã®ã³ã³ãã**ã§ããåããã®ãå®è¡ãã¾ããããããããç¬èªã®ããã»ã¹ãã¡ã¢ãªãªã©ãæã¡ã¾ãããããããã¨ã§ãCPUã®**ç°ãªãã³ã¢**ããããã¯**ç°ãªããã·ã³**ã§ã®**並åå**ãå©ç¨ã§ãã¾ãã
+
+ããã¦ã**ãã¼ããã©ã³ãµã¼**ãåãã忣ã³ã³ããã·ã¹ãã ã¯ã**é çªã«**ããªãã®ã¢ããªãå«ãåã³ã³ããã«**ãªã¯ã¨ã¹ããåé
**ãã¾ããã¤ã¾ããåãªã¯ã¨ã¹ãã¯ãããªãã®ã¢ããªãå®è¡ãã¦ããè¤æ°ã®**ã¬ããªã±ã¼ããããã³ã³ãã**ã®1ã¤ã«ãã£ã¦å¦çããã¾ãã
+
+ããã¦é常ããã®**ãã¼ããã©ã³ãµã¼**ã¯ãã¯ã©ã¹ã¿å
ã®*ä»ã®*ã¢ããªã±ã¼ã·ã§ã³ï¼ä¾ãã°ãç°ãªããã¡ã¤ã³ãç°ãªãURLãã¹ã®ãã¬ãã£ãã¯ã¹ã®é
ä¸ï¼ã¸ã®ãªã¯ã¨ã¹ããå¦çãããã¨ãã§ãããã®éä¿¡ãã¯ã©ã¹ã¿å
ã§å®è¡ããã¦ãã*ä»ã®*ã¢ããªã±ã¼ã·ã§ã³ã®ããã®é©åãªã³ã³ããã«éä¿¡ãã¾ãã
+
+### 1ã³ã³ããã«ã¤ã1ããã»ã¹
+
+ãã®ç¨®ã®ã·ããªãªã§ã¯ããã§ã«ã¯ã©ã¹ã¿ã»ã¬ãã«ã§ã¬ããªã±ã¼ã·ã§ã³ãå¦çãã¦ãããããããããã³ã³ãããã¨ã«**åä¸ã®ï¼Uvicornï¼ããã»ã¹**ãæã¡ããã§ãããã
+
+ãã®å ´åãUvicornã¯ã¼ã«ã¼ãæã¤Gunicornã®ãããªããã»ã¹ããã¼ã¸ã£ã¼ããUvicornã¯ã¼ã«ã¼ã使ãUvicornã¯**é¿ããã**ã§ãããã**ã³ã³ãããã¨ã«Uvicornã®ããã»ã¹ã¯1ã¤ã ã**ã«ãããã§ãããï¼ããããè¤æ°ã®ã³ã³ãããå¿
è¦ã§ãããï¼ã
+
+ï¼GunicornãUvicornãUvicornã¯ã¼ã«ã¼ã管çããããã«ï¼ã³ã³ããå
ã«å¥ã®ããã»ã¹ããã¼ã¸ã£ã¼ãæã¤ãã¨ã¯ãã¯ã©ã¹ã¿ã¼ã·ã¹ãã ã§ãã§ã«å¯¾å¦ãã¦ããã§ããã**ä¸è¦ãªè¤éã**ã追å ããã ãã§ãã
+
+### Containers with Multiple Processes and Special Cases
+
+ãã¡ããã**ç¹æ®ãªã±ã¼ã¹**ã¨ãã¦ã**Gunicornããã»ã¹ããã¼ã¸ã£**ãæã¤**ã³ã³ãã**å
ã§è¤æ°ã®**Uvicornã¯ã¼ã«ã¼ããã»ã¹**ãèµ·åããããå ´åãããã¾ãã
+
+ãã®ãããªå ´åã**å
¬å¼ã®Dockerã¤ã¡ã¼ã¸**ã使ç¨ãããã¨ãã§ãã¾ãããã®ã¤ã¡ã¼ã¸ã«ã¯ãè¤æ°ã®**Uvicornã¯ã¼ã«ã¼ããã»ã¹**ãå®è¡ããããã»ã¹ããã¼ã¸ã£ã¨ãã¦**Gunicorn**ãå«ã¾ãã¦ãããç¾å¨ã®CPUã³ã¢ã«åºã¥ãã¦ã¯ã¼ã«ã¼ã®æ°ãèªåçã«èª¿æ´ããããã®ããã©ã«ãè¨å®ãããã¤ãå«ã¾ãã¦ãã¾ãã詳ããã¯å¾è¿°ã®[Gunicornã«ããå
¬å¼Dockerã¤ã¡ã¼ã¸ - Uvicorn](#gunicornã«ããå
¬å¼dockerã¤ã¡ã¼ã¸---Uvicorn)ã§èª¬æãã¾ãã
+
+以ä¸ã¯ããããçã«ããªã£ã¦ããå ´åã®ä¾ã§ãï¼
+
+#### ã·ã³ãã«ãªã¢ããªã±ã¼ã·ã§ã³
+
+ã¢ããªã±ã¼ã·ã§ã³ã**ã·ã³ãã«**ãªå½¢ã§å®è¡ããå ´åãããã»ã¹æ°ã®ç´°ãã調æ´ãå¿
è¦ãªãå ´åãèªååãããããã©ã«ãã使ç¨ããã ãã§ãã³ã³ããå
ã«ããã»ã¹ããã¼ã¸ã£ãå¿
è¦ããããã¾ãããä¾ãã°ãå
¬å¼Dockerã¤ã¡ã¼ã¸ã§ã·ã³ãã«ãªè¨å®ãå¯è½ã§ãã
+
+#### Docker Compose
+
+Docker Composeã§**ã·ã³ã°ã«ãµã¼ã**ï¼ã¯ã©ã¹ã¿ã§ã¯ãªãï¼ã«ãããã¤ãããã¨ãã§ãã¾ãã®ã§ãå
±æãããã¯ã¼ã¯ã¨**ãã¼ããã©ã³ã·ã³ã°**ãç¶æããªããï¼Docker Composeã§ï¼ã³ã³ããã®ã¬ããªã±ã¼ã·ã§ã³ã管çããç°¡åãªæ¹æ³ã¯ãªãã§ãããã
+
+ãã®å ´åã**åä¸ã®ã³ã³ãã**ã§ã**ããã»ã¹ããã¼ã¸ã£**ãå
é¨ã§**è¤æ°ã®ã¯ã¼ã«ã¼ããã»ã¹**ãèµ·åããããã«ãã¾ãã
+
+#### Prometheusã¨ãã®ä»ã®çç±
+
+ã¾ãã**1ã¤ã®ã³ã³ãã**ã«**1ã¤ã®ããã»ã¹**ãæãããã®ã§ã¯ãªãã**1ã¤ã®ã³ã³ãã**ã«**è¤æ°ã®ããã»ã¹**ãæãããæ¹ãç°¡åã ã¨ãã**ä»ã®çç±**ãããã§ãããã
+
+ä¾ãã°ã(ã»ããã¢ããã«ãããã¾ãã)Prometheusã¨ã¯ã¹ãã¼ã¿ã¼ã®ãããªãã¼ã«ãåãã³ã³ããå
ã«æã¤ãã¨ãã§ãã¾ãã
+
+ãã®å ´åã**è¤æ°ã®ã³ã³ãã**ãããã¨ãããã©ã«ãã§ã¯ãPrometheusã**ã¡ããªã¯ã¹ã**èªã¿ã«æ¥ãã¨ãããã¹ã¦ã®ã¬ããªã±ã¼ããããã³ã³ããã®**èç©ãããã¡ããªã¯ã¹**ãåå¾ããã®ã§ã¯ãªããæ¯å**åä¸ã®ã³ã³ãã**ï¼ãã®ç¹å®ã®ãªã¯ã¨ã¹ããå¦çããã³ã³ããï¼ã®ãã®ãåå¾ãããã¨ã«ãªãã¾ãã
+
+ãã®å ´åã**è¤æ°ã®ããã»ã¹**ãæã¤**1ã¤ã®ã³ã³ãã**ãç¨æããåãã³ã³ããä¸ã®ãã¼ã«ã«ãã¼ã«ï¼ä¾ãã°Prometheusã¨ã¯ã¹ãã¼ã¿ã¼ï¼ããã¹ã¦ã®å
é¨ããã»ã¹ã®Prometheusã¡ããªã¯ã¹ãåéãããã®1ã¤ã®ã³ã³ããä¸ã§ãããã®ã¡ããªã¯ã¹ãå
¬éããæ¹ãã·ã³ãã«ããããã¾ããã
---
-次ã®ã»ã¯ã·ã§ã³ã«é²ã¿ããã®æ
å ±ã¨ãã¼ã«ã使ç¨ãã¦ããã¹ã¦ãçµã¿åããã¾ãã
+éè¦ãªã®ã¯ãç²ç®çã«å¾ããªããã°ãªããªãæ®éã®ã«ã¼ã«ã¯ãªãã¨ãããã¨ã§ãã
+
+ãããã®ã¢ã¤ãã¢ã¯ã**ããªãèªèº«ã®ã¦ã¼ã¹ã±ã¼ã¹**ãè©ä¾¡ããããªãã®ã·ã¹ãã ã«æé©ãªã¢ããã¼ããæ±ºå®ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ãï¼
+
+* ã»ãã¥ãªã㣠- HTTPS
+* èµ·åæã®å®è¡
+* åèµ·å
+* **ã¬ããªã±ã¼ã·ã§ã³ï¼å®è¡ä¸ã®ããã»ã¹æ°ï¼**
+* ã¡ã¢ãª
+* éå§åã®äºåã¹ããã
+
+## ã¡ã¢ãªã¼
+
+ã³ã³ãããã¨ã«**åä¸ã®ããã»ã¹ãå®è¡ãã**ã¨ããããã®ã³ã³ããï¼ã¬ããªã±ã¼ãããã¦ããå ´åã¯1ã¤ä»¥ä¸ï¼ã«ãã£ã¦æ¶è²»ãããå¤ããå°ãªããæç¢ºã«å®ç¾©ããããå®å®ãå¶éãããéã®ã¡ã¢ãªãæã¤ãã¨ã«ãªãã¾ãã
+
+ããã¦ãã³ã³ãã管çã·ã¹ãã ï¼**Kubernetes**ãªã©ï¼ã®è¨å®ã§ãåãã¡ã¢ãªå¶éã¨è¦ä»¶ãè¨å®ãããã¨ãã§ãã¾ãã
+
+ããããã°ãã³ã³ãããå¿
è¦ã¨ããã¡ã¢ãªéã¨ã¯ã©ã¹ã¿å
ã®ãã·ã³ã§å©ç¨å¯è½ãªã¡ã¢ãªéãèæ
®ãã¦ã**å©ç¨å¯è½ãªãã·ã³**ã«**ã³ã³ãã**ãã¬ããªã±ã¼ãã§ããããã«ãªãã¾ãã
+
+ã¢ããªã±ã¼ã·ã§ã³ã**ã·ã³ãã«**ãªãã®ã§ããã°ãããã¯ãããã**åé¡ã«ã¯ãªããªã**ã§ããããããã¼ããªã¡ã¢ãªå¶éãæå®ããå¿
è¦ã¯ãªããããããªãã§ãã
+
+ãããã**å¤ãã®ã¡ã¢ãªã使ç¨**ãã¦ããå ´åï¼ãã¨ãã°**æ©æ¢°å¦ç¿**ã¢ãã«ãªã©ï¼ãã©ãã ãã®ã¡ã¢ãªãæ¶è²»ãã¦ãããã確èªãã**åãã·ã³ã§å®è¡ããã³ã³ããã®æ°**ã調æ´ããå¿
è¦ãããã¾ãï¼ããã¦ããããã¯ã©ã¹ã¿ã«ãã·ã³ã追å ãã¾ãï¼ã
+
+**ã³ã³ãããã¨ã«è¤æ°ã®ããã»ã¹**ãå®è¡ããå ´åï¼ãã¨ãã°å
¬å¼ã®Dockerã¤ã¡ã¼ã¸ã§ï¼ãèµ·åããããã»ã¹ã®æ°ã**å©ç¨å¯è½ãªã¡ã¢ãªä»¥ä¸ã«æ¶è²»ããªã**ããã«ããå¿
è¦ãããã¾ãã
+
+## éå§åã®äºåã¹ãããã¨ã³ã³ãã
+
+ã³ã³ããï¼DockerãKubernetesãªã©ï¼ã使ã£ã¦ããå ´åã主ã«2ã¤ã®ã¢ããã¼ããããã¾ãã
+
+### è¤æ°ã®ã³ã³ãã
+
+è¤æ°ã®**ã³ã³ãã**ããããããããããããã**åä¸ã®ããã»ã¹**ãå®è¡ãã¦ããå ´åï¼**Kubernetes**ã¯ã©ã¹ã¿ãªã©ï¼ãã¬ããªã±ã¼ããããã¯ã¼ã«ã¼ã³ã³ãããå®è¡ãã**åã«**ãåä¸ã®ã³ã³ããã§**äºåã®ã¹ããã**ã®ä½æ¥ãè¡ã**å¥ã®ã³ã³ãã**ãæã¡ããã¨æãã§ãããã
+
+!!! info
+ ããKubernetesã使ç¨ãã¦ããå ´å, ããã¯ããããInit ã³ã³ããã§ãããã
+
+ã¦ã¼ã¹ã±ã¼ã¹ãäºåã®ã¹ãããã**並åã§è¤æ°å**å®è¡ããã®ã«åé¡ããªãå ´åï¼ä¾ï¼ãã¼ã¿ãã¼ã¹ã®æºåãã§ãã¯ï¼ãã¡ã¤ã³ããã»ã¹ãéå§ããåã«ããããã®ã¹ããããåã³ã³ããã«å
¥ãããã¨ãå¯è½ã§ãã
+
+### åä¸ã³ã³ãã
+
+åç´ãªã»ããã¢ããã§ã**åä¸ã®ã³ã³ãã**ã§è¤æ°ã®**ã¯ã¼ã«ã¼ã»ããã»ã¹**ï¼ã¾ãã¯1ã¤ã®ããã»ã¹ã®ã¿ï¼ãèµ·åããå ´åãã¢ããªã§ããã»ã¹ãéå§ããç´åã«ãåãã³ã³ããã§äºåã®ã¹ããããå®è¡ã§ãã¾ããå
¬å¼Dockerã¤ã¡ã¼ã¸ã¯ãå
é¨çã«ããããµãã¼ããã¦ãã¾ãã
+
+## Gunicornã«ããå
¬å¼Dockerã¤ã¡ã¼ã¸ - Uvicorn
+
+åã®ç« ã§è©³ãã説æããããã«ãUvicornã¯ã¼ã«ã¼ã§åä½ããGunicornãå«ãå
¬å¼ã®Dockerã¤ã¡ã¼ã¸ãããã¾ãï¼ [Server Workers - Gunicorn 㨠Uvicorn](./server-workers.md){.internal-link target=_blank}ã§è©³ãã説æãã¦ãã¾ãã
+
+ãã®ã¤ã¡ã¼ã¸ã¯ã主ã«ä¸è¨ã§èª¬æããç¶æ³ã§å½¹ã«ç«ã¤ã§ãããï¼ [è¤æ°ã®ããã»ã¹ã¨ç¹æ®ãªã±ã¼ã¹ãæã¤ã³ã³ããï¼Containers with Multiple Processes and Special Casesï¼](#containers-with-multiple-processes-and-special-cases)
+
+* tiangolo/uvicorn-gunicorn-fastapi.
+
+!!! warning
+ ãã®ãã¼ã¹ã¤ã¡ã¼ã¸ãé¡ä¼¼ã®ã¤ã¡ã¼ã¸ã¯**å¿
è¦ãªã**å¯è½æ§ãé«ãã®ã§ã[ä¸è¨ã®: FastAPIç¨ã®Dockerã¤ã¡ã¼ã¸ããã«ãããï¼Build a Docker Image for FastAPIï¼](#build-a-docker-image-for-fastapi)ã®ããã«ã¼ãããã¤ã¡ã¼ã¸ããã«ãããæ¹ãè¯ãã§ãããã
+
+ãã®ã¤ã¡ã¼ã¸ã«ã¯ãå©ç¨å¯è½ãªCPUã³ã¢ã«åºã¥ãã¦**ã¯ã¼ã«ã¼ã»ããã»ã¹ã®æ°**ãè¨å®ãã**ãªã¼ããã¥ã¼ãã³ã°**ã¡ã«ããºã ãå«ã¾ãã¦ãã¾ãã
+
+ããã¯**è³¢æãªããã©ã«ã**ãåãã¦ãã¾ããã**ç°å¢å¤æ°**ãè¨å®ãã¡ã¤ã«ã使ã£ã¦ãã¹ã¦ã®è¨å®ã夿´ãããæ´æ°ããããããã¨ãã§ãã¾ãã
-## Traefikã¨HTTPSã使ç¨ããDocker Swarmã¢ã¼ãã®ã¯ã©ã¹ã¿
+ã¾ããã¹ã¯ãªããã§**éå§åã®äºåã¹ããã**ãå®è¡ãããã¨ããµãã¼ããã¦ããã
-HTTPSãå¦çããï¼è¨¼ææ¸ã®åå¾ã¨æ´æ°ãå«ãï¼Traefikã使ç¨ãã¦ãDocker Swarmã¢ã¼ãã®ã¯ã©ã¹ã¿ãæ°åï¼20åç¨åº¦ï¼ã§ã»ããã¢ããã§ãã¾ãã
+!!! tip
+ ãã¹ã¦ã®è¨å®ã¨ãªãã·ã§ã³ãè¦ãã«ã¯ãDockerã¤ã¡ã¼ã¸ã®ãã¼ã¸ãã覧ãã ãã: tiangolo/uvicorn-gunicorn-fastapi
-Docker Swarmã¢ã¼ãã使ç¨ãããã¨ã§ã1å°ã®ãã·ã³ã®ãã¯ã©ã¹ã¿ãããéå§ã§ãï¼1ãæããã5ãã«ã®ãµã¼ãã¼ã§ãã§ãã¾ãï¼ãå¾ããå¿
è¦ãªã ããµã¼ãã¼ãæ¡å¼µã§ãã¾ãã
+### å
¬å¼Dockerã¤ã¡ã¼ã¸ã®ããã»ã¹æ°
-Traefikããã³HTTPSå¦çãåããDocker Swarm Modeã¯ã©ã¹ã¿ã¼ãã»ããã¢ããããã«ã¯ã次ã®ã¬ã¤ãã«å¾ãã¾ã:
+ãã®ã¤ã¡ã¼ã¸ã®**ããã»ã¹æ°**ã¯ãå©ç¨å¯è½ãªCPU**ã³ã¢**ãã**èªåçã«è¨ç®**ããã¾ãã
+
+ã¤ã¾ããCPUããå¯è½ãªéã**ããã©ã¼ãã³ã¹**ã**å¼ãåºãã**ã¨ãã¾ãã
+
+ã¾ãã**ç°å¢å¤æ°**ãªã©ã使ã£ãè¨å®ã§èª¿æ´ãããã¨ãã§ãã¾ãã
+
+ããããããã»ã¹ã®æ°ã¯ã³ã³ãããå®è¡ãã¦ããCPUã«ä¾åããããã**æ¶è²»ãããã¡ã¢ãªã®é**ãããã«ä¾åãããã¨ã«ãªãã¾ãã
+
+ãã®ãããï¼æ©æ¢°å¦ç¿ã¢ãã«ãªã©ã§ï¼å¤§éã®ã¡ã¢ãªãæ¶è²»ããã¢ããªã±ã¼ã·ã§ã³ã§ããµã¼ãã¼ã®CPUã³ã¢ãå¤ãã**ã¡ã¢ãªãå°ãªã**å ´åãã³ã³ããã¯å©ç¨å¯è½ãªã¡ã¢ãªãããå¤ãã®ã¡ã¢ãªã使ããã¨ãããã¨ã«ãªãã¾ãã
+
+ãã®çµæãããã©ã¼ãã³ã¹ã大å¹
ã«ä½ä¸ããï¼ãããã¯ã¯ã©ãã·ã¥ããï¼å¯è½æ§ãããã¾ããð¨
+
+### Dockerfileã使ãã
+
+ãã®ç»åã«åºã¥ãã¦`Dockerfile`ã使ããæ¹æ³ã以ä¸ã«ç¤ºãã¾ãï¼
+
+```Dockerfile
+FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
+
+COPY ./requirements.txt /app/requirements.txt
+
+RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
+
+COPY ./app /app
+```
+
+### ãã大ããªã¢ããªã±ã¼ã·ã§ã³
+
+[è¤æ°ã®ãã¡ã¤ã«ãæã¤å¤§ããªã¢ããªã±ã¼ã·ã§ã³](../tutorial/bigger-applications.md){.internal-link target=_blank}ã使ããã»ã¯ã·ã§ã³ã«å¾ã£ãå ´åã`Dockerfile`ã¯æ¬¡ã®ããã«ãªãã¾ãï¼
+
+```Dockerfile hl_lines="7"
+FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
+
+COPY ./requirements.txt /app/requirements.txt
+
+RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
+
+COPY ./app /app/app
+```
+
+### ãã¤ä½¿ãã®ã
+
+ããããã**Kubernetes**ï¼ã¾ãã¯ä»ã®ãã®ï¼ã使ç¨ãã¦ãã¦ããã§ã«ã¯ã©ã¹ã¿ã¬ãã«ã§è¤æ°ã®**ã³ã³ãã**ã§**ã¬ããªã±ã¼ã·ã§ã³**ãè¨å®ãã¦ããå ´åã¯ããã®å
¬å¼ãã¼ã¹ã¤ã¡ã¼ã¸ï¼ã¾ãã¯ä»ã®é¡ä¼¼ã®ãã®ï¼ã¯**使ç¨ãã¹ãã§ã¯ããã¾ãã**ã
+
+ãã®ãããªå ´åã¯ãä¸è¨ã®ããã«**ã¼ããã**ã¤ã¡ã¼ã¸ãæ§ç¯ããæ¹ãããã§ãããï¼ [FastAPIç¨ã®Dockerã¤ã¡ã¼ã¸ããã«ãããï¼Build a Docker Image for FastAPIï¼](#build-a-docker-image-for-fastapi) ãåç
§ãã¦ãã ããã
+
+ãã®ã¤ã¡ã¼ã¸ã¯ã主ã«ä¸è¨ã®[è¤æ°ã®ããã»ã¹ã¨ç¹æ®ãªã±ã¼ã¹ãæã¤ã³ã³ããï¼Containers with Multiple Processes and Special Casesï¼](#containers-with-multiple-processes-and-special-cases)ã§èª¬æãããããªç¹æ®ãªã±ã¼ã¹ã§å½¹ã«ç«ã¡ã¾ãã
+
+ä¾ãã°ãã¢ããªã±ã¼ã·ã§ã³ã**ã·ã³ãã«**ã§ãCPUã«å¿ããããã©ã«ãã®ããã»ã¹æ°ãè¨å®ããã°ãã¾ãããå ´åããã¯ã©ã¹ã¿ã¬ãã«ã§ã¬ããªã±ã¼ã·ã§ã³ãæåã§è¨å®ããæéãçãããå ´åãã¢ããªã§è¤æ°ã®ã³ã³ãããå®è¡ããªãå ´åãªã©ã§ãã
+
+ã¾ãã¯ã**Docker Compose**ã§ãããã¤ããåä¸ã®ãµã¼ãã§å®è¡ãã¦ããå ´åãªã©ã§ãã
+
+## ã³ã³ããã»ã¤ã¡ã¼ã¸ã®ãããã¤
+
+ã³ã³ããï¼Dockerï¼ã¤ã¡ã¼ã¸ãæã«å
¥ããå¾ãããããããã¤ããã«ã¯ããã¤ãã®æ¹æ³ãããã¾ãã
+
+ä¾ãã°ä»¥ä¸ã®ãªã¹ãã®æ¹æ³ã§ã:
+
+* åä¸ãµã¼ãã¼ã®**Docker Compose**
+* **Kubernetes**ã¯ã©ã¹ã¿
+* Docker Swarmã¢ã¼ãã®ã¯ã©ã¹ã¿ã¼
+* Nomadã®ãããªå¥ã®ãã¼ã«
+* ã³ã³ããã»ã¤ã¡ã¼ã¸ããããã¤ããã¯ã©ã¦ãã»ãµã¼ãã¹
+
+## Poetryãå©ç¨ããDockerã¤ã¡ã¼ã¸
+
+ããããã¸ã§ã¯ãã®ä¾åé¢ä¿ã管çããããã«Poetryãå©ç¨ããå ´åããã«ãã¹ãã¼ã¸ãã«ãã使ãã¨è¯ãã§ãããã
+
+```{ .dockerfile .annotate }
+# (1)
+FROM python:3.9 as requirements-stage
+
+# (2)
+WORKDIR /tmp
+
+# (3)
+RUN pip install poetry
+
+# (4)
+COPY ./pyproject.toml ./poetry.lock* /tmp/
+
+# (5)
+RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
+
+# (6)
+FROM python:3.9
+
+# (7)
+WORKDIR /code
+
+# (8)
+COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt
+
+# (9)
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
+
+# (10)
+COPY ./app /code/app
+
+# (11)
+CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
+```
+
+1. ããã¯æåã®ã¹ãã¼ã¸ã§ã`requirements-stage`ã¨åä»ãããã¾ã
+2. `/tmp` ãç¾å¨ã®ä½æ¥ãã£ã¬ã¯ããªã«è¨å®ãã¾ã
+ ããã§ `requirements.txt` ã¨ãããã¡ã¤ã«ãçæãã¾ãã
+
+3. ãã®Dockerã¹ãã¼ã¸ã«Poetryãã¤ã³ã¹ãã¼ã«ãã¾ã
+
+4. pyproject.toml`ã¨`poetry.lock`ãã¡ã¤ã«ã`/tmp` ãã£ã¬ã¯ããªã«ã³ãã¼ãã¾ã
+
+ `./poetry.lock*`ï¼æ«å°¾ã«`*`ï¼ã使ç¨ããããããã®ãã¡ã¤ã«ãã¾ã å©ç¨ã§ããªãå ´åã§ãã¯ã©ãã·ã¥ãããã¨ã¯ãªãã§ãã
+5. requirements.txt`ãã¡ã¤ã«ãçæãã¾ã
+
+6. ããã¯æå¾ã®ã¹ãã¼ã¸ã§ãããããã«ãããã®ã¯ãã¹ã¦æçµçãªã³ã³ããã»ã¤ã¡ã¼ã¸ã«ä¿åããã¾ã
+7. ç¾å¨ã®ä½æ¥ãã£ã¬ã¯ããªã `/code` ã«è¨å®ãã¾ã
+8. `requirements.txt`ãã¡ã¤ã«ã `/code` ãã£ã¬ã¯ããªã«ã³ãã¼ãã¾ã
+ ãã®ãã¡ã¤ã«ã¯åã®Dockerã¹ãã¼ã¸ã«ããåå¨ããªãããã`--from-requirements-stage`ã使ã£ã¦ã³ãã¼ãã¾ãã
+9. çæããã `requirements.txt` ãã¡ã¤ã«ã«ããããã±ã¼ã¸ã®ä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ãã¾ã
+10. app` ãã£ã¬ã¯ããªã `/code` ãã£ã¬ã¯ããªã«ã³ãã¼ãã¾ã
+11. uvicorn` ã³ãã³ããå®è¡ãã¦ã`app.main` ããã¤ã³ãã¼ããã `app` ãªãã¸ã§ã¯ãã使ç¨ããããã«æç¤ºãã¾ã
+!!! tip
+ "+"ã®å¹ãåºããã¯ãªãã¯ããã¨ãããããã®è¡ãä½ãããã®ããè¦ããã¨ãã§ãã¾ã
+
+**Dockerã¹ãã¼ã¸**ã¯`Dockerfile`ã®ä¸é¨ã§ã**䏿çãªã³ã³ããã¤ã¡ã¼ã¸**ã¨ãã¦åä½ãã¾ãã
+
+æåã®ã¹ãã¼ã¸ã¯ **Poetryã®ã¤ã³ã¹ãã¼ã«**㨠Poetry ã® `pyproject.toml` ãã¡ã¤ã«ããããã¸ã§ã¯ãã®ä¾åé¢ä¿ãå«ã**`requirements.txt`ãçæ**ããããã ãã«ä½¿ç¨ããã¾ãã
+
+ãã® `requirements.txt` ãã¡ã¤ã«ã¯å¾åã® **次ã®ã¹ãã¼ã¸**ã§ `pip` ã¨å
±ã«ä½¿ç¨ããã¾ãã
+
+æçµçãªã³ã³ããã¤ã¡ã¼ã¸ã§ã¯ã**æçµã¹ãã¼ã¸**ã®ã¿ãä¿åããã¾ããåã®ã¹ãã¼ã¸ã¯ç ´æ£ããã¾ãã
+
+Poetryã使ç¨ããå ´åã**Dockerãã«ãã¹ãã¼ã¸ãã«ã**ã使ç¨ãããã¨ã¯çã«ããªã£ã¦ãã¾ãã
+
+ãªããªããæçµçãªã³ã³ããã¤ã¡ã¼ã¸ã«Poetryã¨ãã®ä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ããã¦ããå¿
è¦ã¯ãªãã**å¿
è¦ãªã®ã¯**ããã¸ã§ã¯ãã®ä¾åé¢ä¿ãã¤ã³ã¹ãã¼ã«ããããã«çæããã `requirements.txt` ãã¡ã¤ã«ã ãã ããã§ãã
+
+ããã¦æ¬¡ã®ï¼ããã¦æçµçãªï¼ã¹ãã¼ã¸ã§ã¯ãåè¿°ã¨ã»ã¼åãæ¹æ³ã§ã¤ã¡ã¼ã¸ããã«ããã¾ãã
+
+### TLS Termination Proxyã®è£å´ - Poetry
+
+ç¹°ãè¿ãã«ãªãã¾ãããNginxãTraefikã®ãããªTLS Termination Proxyï¼ãã¼ããã©ã³ãµã¼ï¼ã®å¾ãã§ã³ã³ãããåããã¦ããå ´åã¯ã`--proxy-headers`ãªãã·ã§ã³ãã³ãã³ãã«è¿½å ãã¾ãï¼
+
+```Dockerfile
+CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
+```
-### Docker Swarm Mode and Traefik for an HTTPS cluster
+## ã¾ã¨ã
-### FastAPIã¢ããªã±ã¼ã·ã§ã³ã®ãããã¤
+ã³ã³ããã»ã·ã¹ãã ï¼ä¾ãã°**Docker**ã**Kubernetes**ãªã©ï¼ã使ãã°ããã¹ã¦ã®**ãããã¤ã¡ã³ãã®ã³ã³ã»ãã**ãæ±ãã®ãããªãç°¡åã«ãªãã¾ãï¼
-ãã¹ã¦ãè¨å®ããããã®æãç°¡åãªæ¹æ³ã¯ã[**FastAPI** Project Generators](../project-generation.md){.internal-link target=_blank}ã使ç¨ãããã¨ã§ãããã
+* ã»ãã¥ãªã㣠- HTTPS
+* èµ·åæã®å®è¡
+* åèµ·å
+* **ã¬ããªã±ã¼ã·ã§ã³ï¼å®è¡ä¸ã®ããã»ã¹æ°ï¼**
+* ã¡ã¢ãª
+* éå§åã®äºåã¹ããã
-ä¸è¿°ããTraefikã¨HTTPSãåããDocker Swarm ã¯ã©ã¹ã¿ãçµ±åãããããã«è¨è¨ããã¦ãã¾ãã
+ã»ã¨ãã©ã®å ´åããã¼ã¹ã¨ãªãã¤ã¡ã¼ã¸ã¯ä½¿ç¨ãããå
¬å¼ã®Python Dockerã¤ã¡ã¼ã¸ããã¼ã¹ã«ãã**ã³ã³ããã¤ã¡ã¼ã¸ãã¼ããããã«ã**ãã¾ãã
-2åç¨åº¦ã§ããã¸ã§ã¯ããçæããã¾ãã
+`Dockerfile`ã¨**Dockerãã£ãã·ã¥**å
ã®å½ä»¤ã®**é çª**ã«æ³¨æãããã¨ã§ã**ãã«ãæéãæå°å**ãããã¨ãã§ããçç£æ§ãæå¤§åãããã¨ãã§ãã¾ãï¼ããã¦éå±ãé¿ãããã¨ãã§ãã¾ãï¼ãð
-çæãããããã¸ã§ã¯ãã¯ãããã¤ã®æç¤ºãããã¾ããããããå®è¡ããã¨ããã«2åãããã¾ãã
+ç¹å¥ãªã±ã¼ã¹ã§ã¯ãFastAPIç¨ã®å
¬å¼Dockerã¤ã¡ã¼ã¸ã使ãããããããã¾ãããð¤