iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Modern Web

FastAPI 入門30天系列 第 28

Day-28 容器化

  • 分享至 

  • xImage
  •  

我們的30天也接近尾聲了,該學的東西也學習的差不多,接著我們可以來思考該怎麼將服務進行部署,通常我們會使用 Docker,將應用程式容器化,藉此部署在我們想要的地方。

在這邊我們將會簡單介紹一下 Docker 的一些基本知識,再接著介紹該怎麼將服務容器化。

Docker

Docker是一個開放原始碼的開放平臺軟體,用於開發應用、交付(shipping)應用和執行應用。Docker允許使用者將基礎設施(Infrastructure)中的應用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟體的速度。

映像檔 ( Image )

映像檔就是一個唯獨的模板,我們可以使用這些模板,來去啟動我們想要的容器。

容器 ( Container )

容器是從映像檔建立的虛擬機器,可以根據映像檔的設定在建立時就執行特定的動作,例如啟動伺服器軟體等等。每個容器都是被互相隔開、保證安全的平台。

倉庫 ( Repository )

倉庫簡單來說就是 Docker Image 版的 Git,用來管理儲放映象檔,Docker有自己的倉庫叫做DockerHub,各大雲端供應商也都有提供這項服務。

容器化

要進行容器化,我們首先要先撰寫一個 Dockerfile,藉由這個 Dockerfile,我們才能建立對應的映象檔。我們可以在專案目錄下新增以下 Dockerfile

# Dockerfile

# 此映像檔繼承安裝好 python:3.10 的 Linux 環境
FROM python:3.10

# 設定工作目錄
WORKDIR /code

# 複製 requirements 到工作目錄,下一步將會安裝相依的套件
# 由於這個檔案不經常更改,Docker 會檢測它並在這一步使用快取,也為下一步啟用快取
COPY ./requirements.txt /code/requirements.txt

# 執行 pip 命令安裝依賴項
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# 複製專案程式碼到工作目錄
COPY ./src /code/src

# 設定啟動容器時要執行的指令
CMD uvicorn src.main:app --host 0.0.0.0 --port 8000

新增完後我們可以使用:

docker image build -t <tagname> .

執行成功將會建立好映像檔,-t 代表幫這次建立的映像檔加上一個標籤,. 代表根據當下目錄的Dockerfile 進行建置。

docker run -d -p 8000:8000 <tagname>

我們可以使用 docker run 來啟動一個容器:

  • -d:代表容器在背景執行
  • -p:設定本機的連接埠連結對應到容器的連接埠,:

啟動成功之後就可以在本機上訪問到你的服務。

小結

今天我們做到將服務容器化,容器化之後就可以更好的部屬到任何地方,也可以在 git 倉庫上搭配 CI/CD 等操作達成自動建置部署。明天將會帶大家將服務部署到雲端上。

參考資料

Docker 基本教學 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)

FastAPI in Containers - Docker - FastAPI (tiangolo.com)


上一篇
Day-27 檔案上傳
下一篇
Day-29 部屬到GCP Cloud Run
系列文
FastAPI 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言