iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

現在我用python flask來寫一個顯示hello world字樣的一個空網頁,並且寫一個Dockerfile來建立執行這個web server所需的環境,編譯成Docker Image後推送到ECR;這樣我就能夠使用這個hello web的Docker Image來測試ECR Service (驗證這樣的設定方式是不是能work)。

A. 建立 ECR Repository(Console)

  1. ECR → Repositories → Create repository

  2. Name 輸入 hello-web,其餘預設 → Create

  3. 進入剛建立的 repository,點 View push commands(頁面會顯示你帳號/區域專屬的指令範例)。(AWS 文件)

    https://ithelp.ithome.com.tw/upload/images/20250918/20161802EpTP1ou8Av.png

     https://ithelp.ithome.com.tw/upload/images/20250918/20161802HxzddmcXq4.png

B. 在 EC2 上寫一個最小的 Hello World 並建映像

在 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 .

C. 登入 ECR 並推送映像(在 EC2 上)

在 ECR repository 頁面 View push commands 會給專屬指令(步驟A的第二張影像);其核心就是下面三步:

  1. get-login-password 登入 ECR
  2. tag 成你的 registry URI
  3. 然後 push 到 ECR

把 <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
https://ithelp.ithome.com.tw/upload/images/20250918/20161802jfyGbzPNBK.jpg


上一篇
Day7 - 在EC2上安裝ECS Agent
下一篇
Day9 - 建立ECS Task Definition
系列文
從零開始:AWS 部署 Python 自動交易程式與交易監測 Dashboard 實戰筆記12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言