我們的30天也接近尾聲了,該學的東西也學習的差不多,接著我們可以來思考該怎麼將服務進行部署,通常我們會使用 Docker,將應用程式容器化,藉此部署在我們想要的地方。
在這邊我們將會簡單介紹一下 Docker 的一些基本知識,再接著介紹該怎麼將服務容器化。
Docker是一個開放原始碼的開放平臺軟體,用於開發應用、交付(shipping)應用和執行應用。Docker允許使用者將基礎設施(Infrastructure)中的應用單獨分割出來,形成更小的顆粒(容器),從而提高交付軟體的速度。
映像檔就是一個唯獨的模板,我們可以使用這些模板,來去啟動我們想要的容器。
容器是從映像檔建立的虛擬機器,可以根據映像檔的設定在建立時就執行特定的動作,例如啟動伺服器軟體等等。每個容器都是被互相隔開、保證安全的平台。
倉庫簡單來說就是 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 來啟動一個容器:
啟動成功之後就可以在本機上訪問到你的服務。
今天我們做到將服務容器化,容器化之後就可以更好的部屬到任何地方,也可以在 git 倉庫上搭配 CI/CD 等操作達成自動建置部署。明天將會帶大家將服務部署到雲端上。
Docker 基本教學 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
FastAPI in Containers - Docker - FastAPI (tiangolo.com)