Journal
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
常用指令與情境對照
| 情境 | 指令 |
|---|---|
| 拉取最新 image | docker pull <ecr-registry>/<image>:<tag> |
| 看目前跑了哪些 stack | docker stack ls |
| 看所有 service 狀態 | docker service ls |
| 部署/更新一個 stack | docker stack deploy -c ./docker-compose.yml <stack-name> |
| 下架一個 stack | docker stack rm <stack-name> |
| 追蹤某個 service 的日誌 | docker service logs <service-name> -f |
標準部署流程
- ECR 登入(見上方)
docker pull拉取要部署的 image 版本docker stack deploy -c ./docker-compose.yml <stack-name>— 已存在的 stack 會做滾動更新docker service ls確認 replicas 起來了docker service logs <service-name> -f看啟動日誌,確認無異常
一些後續可以做的
dockr-compose可以改成用環境變數將一些設定或是版本資訊寫在變數檔裡面進行匯入,設計一支.sh專門進行deploy,後續如果要重新部署的話就只需要確認image的版號,修改變數檔,執行自動部署。再更進一步的做法或許可以把抓取image、關閉服務以及重新部署全部串在一起。