在現代軟體開發中,容器化 (Containerization) 幾乎已成標準做法。不論是微服務架構、DevOps 自動化流程,還是跨雲部署策略,容器都能幫助企業快速、彈性地交付應用程式。但容器本身只是包裝,容器映像檔 (Image) 需要安全可靠的地方儲存,才能確保部署順暢與企業資訊安全。這時,AWS Elastic Container Registry (ECR) 就像是容器的「保險庫」。
很多企業初期會使用 Docker Hub 或自行架設 Harbor 來存放映像檔,但隨著應用規模增大,問題會慢慢浮現:
因此,一個高安全性、低維運負擔、且與雲端原生整合的容器倉庫就顯得非常重要。
1. 與 AWS 生態整合順暢
ECS、EKS、Lambda 原生支援:部署容器時可直接拉取映像檔,不需額外設定。
CI/CD 流程無縫整合:搭配 CodePipeline、CodeBuild,能做到「打包 → 推送 → 部署」自動化,減少人為操作錯誤。
2. 高度安全與合規
IAM 精細權限控制:誰能 push、誰能 pull,一目了然。
映像檔安全掃描:自動檢測漏洞,支援基礎或進階掃描,提前發現安全風險。
加密存儲:所有映像檔自動透過 AWS KMS 加密,符合企業合規需求。
3. 高可靠性與可用性
ECR 建立在 AWS 全球基礎設施上,具備高可用性與跨區域複製功能。
不需要維護伺服器,也不擔心儲存空間不足,AWS 幫你管理。
4. 高效能
VPC Endpoints 整合:映像檔傳輸不經過公共網路,速度快且安全。
快速拉取:對於大規模自動擴展的容器集群,能確保部署效能穩定。
方案 | 優點 | 缺點 | 適合對象 |
---|---|---|---|
Docker Hub | 免費、操作簡單 | 流量限制、安全控管不足 | 個人/小型專案 |
Harbor (自建) | 自由度高、支援多種認證方式 | 需自行維護,成本高 | 需掌控整個環境的 IT 團隊 |
AWS ECR | 原生整合 AWS、生態完整、安全性高、免維運 | 綁定 AWS 生態系 | 已在 AWS 上運行的企業或雲端專案 |
總結
優勢:
比喻:
Docker Hub → 便利商店:方便,但有流量限制。
Harbor → 自家倉庫:完全自己管,但麻煩。
ECR → 銀行保險庫:安全、可靠、專業,讓企業可以放心存放與使用。
實務操作:
Step 1:建立 ECR 儲存庫 (Repository)
登入 AWS Management Console → 搜尋 ECR → 點選 Repositories → Create repository
填寫儲存庫資訊 Repository name:自訂映像檔名稱,例如 my-app
Visibility:選擇 Private(私有)或 Public(公開)
Encryption:建議使用 AWS KMS 加密,保障映像檔安全
建立儲存庫 點擊 Create repository 即完成
提示:建立完成後,AWS 會提供該儲存庫的 URI,例如:
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app
這個 URI 將在後續 push / pull 映像檔時使用。
Step 2:推送與拉取容器映像檔(docker push / pull 範例)
登入 ECR(取得暫時登入憑證):
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
建立本地 Docker 映像檔:
docker build -t my-app:latest .
標記映像檔(Tag):
docker tag my-app:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest
推送映像檔到 ECR:
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest
從 ECR 拉取映像檔:
docker pull 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest
提示:推送前一定要先登入 ECR,否則會出現 unauthorized 的錯誤。
Step 3:設定 IAM 權限(誰能推、誰能拉)
AWS ECR 的安全性依賴 IAM Policy 控制存取權限,範例如下:
允許推送與拉取的完整範例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:BatchGetImage"
],
"Resource": "arn:aws:ecr:ap-northeast-1:123456789012:repository/my-app"
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage"
],
"Resource": "arn:aws:ecr:ap-northeast-1:123456789012:repository/my-app"
}
]
}
提示:建議對不同團隊或 CI/CD 系統分別建立 IAM Role,清楚區分「誰能推」與「誰能拉」,提高安全性。
完成以上三步驟後,你就可以:
建立自己的私有容器保險庫
將本地 Docker 映像檔安全推送到 AWS ECR
管理誰可以使用映像檔,確保部署安全