EC2 + ECR + Docker Swarm 部署 Runbook

筆記一些我實際在用的部署流程,順便加深對這塊的操作。

環境全貌

  • 主機:AWS EC2
  • Image 倉庫:AWS ECR
  • 編排:Docker Swarm(docker stack

連線與認證

SSH 進 EC2 後,先向 ECR 取得登入權杖:

aws ecr get-login-password --region <region> \
  | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com

常用指令與情境對照

情境指令
拉取最新 imagedocker pull <ecr-registry>/<image>:<tag>
看目前跑了哪些 stackdocker stack ls
看所有 service 狀態docker service ls
部署/更新一個 stackdocker stack deploy -c ./docker-compose.yml <stack-name>
下架一個 stackdocker stack rm <stack-name>
追蹤某個 service 的日誌docker service logs <service-name> -f

標準部署流程

  1. ECR 登入(見上方)
  2. docker pull 拉取要部署的 image 版本
  3. docker stack deploy -c ./docker-compose.yml <stack-name> — 已存在的 stack 會做滾動更新
  4. docker service ls 確認 replicas 起來了
  5. docker service logs <service-name> -f 看啟動日誌,確認無異常

一些後續可以做的

dockr-compose可以改成用環境變數將一些設定或是版本資訊寫在變數檔裡面進行匯入,設計一支.sh專門進行deploy,後續如果要重新部署的話就只需要確認image的版號,修改變數檔,執行自動部署。再更進一步的做法或許可以把抓取image、關閉服務以及重新部署全部串在一起。