現在我用python flask來寫一個顯示hello world
字樣的一個空網頁,並且寫一個Dockerfile
來建立執行這個web server所需的環境,編譯成Docker Image後推送到ECR;這樣我就能夠使用這個hello web的Docker Image來測試ECR Service (驗證這樣的設定方式是不是能work)。
進 ECR → Repositories → Create repository
Name 輸入 hello-web
,其餘預設 → Create
進入剛建立的 repository,點 View push commands(頁面會顯示你帳號/區域專屬的指令範例)。(AWS 文件)
在 EC2 建一個資料夾(例如 ~/hello
),建立兩個檔案:
app.py
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.get("/")
def hello():
return PlainTextResponse("hello world")
Dockerfile
FROM python:3.12-slim
WORKDIR /app
RUN pip install --no-cache-dir fastapi uvicorn
COPY app.py /app/
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
在 EC2 上 build(之後 ECS 會拉這個映像來跑):
cd ~/hello
docker build -t hello-web:v1 .
在 ECR repository 頁面 View push commands 會給專屬指令(步驟A的第二張影像);其核心就是下面三步:
把 <ACCOUNT_ID> 與 換成自己的;或乾脆照「View push commands」整段複製。
REGION=ap-northeast-1
ACCOUNT_ID=<12碼帳號ID> # ECR 頁面會顯示
REPO=hello-web
aws ecr get-login-password --region $REGION \
| docker login --username AWS --password-stdin \
${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com
docker tag hello-web:v1 ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:v1
docker push ${ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com/${REPO}:v1
推送成功後,就可以在AWS的ECR中看到自己推上去的Docker Image