iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

AWS架構應用系列 第 21

Amazon Elastic Container Registry (ECR) - Day21

  • 分享至 

  • xImage
  •  

Amazon Elastic Container Registry (ECR) - Day21

完成了 Docker 容器映像 (Container Image) 的製作,接著我們必須要這個影像布署到各個容器,所以我們要考慮的是如何儲存這個影像。 Amazon Elastic Container Registry (ECR) 是一個全受管的 Docker 容器登錄檔,可讓開發人員存放、管理以及部署 Docker 容器映像,可以讓開發人員不必操作自己的容器儲存庫,也不必擔心如何擴展基礎設施,更重要的是使用 Amazon ECR 沒有預付費用或長期合約,只需為儲存庫中存放的資料量以及傳輸到網際網路的資料支付費用。

在將 Docker 容器映像放入 Amaon ECR 中時,先確認一下容器映像的大小以及執行時所佔用的記憶體

# 查看Container的CPU、記憶體及網路使用
docker stats
# 列出本機映像檔
docker images

由圖中可以看出來整個映像檔佔了 464MB ,這主要的原因是 Dockerfile 裡指定底層的 Bins/Libs 為 amazonlinux:2 以及安裝了 wget/httpd/php 這三個套件,可以選擇用busybox可以讓整個映像檔小一點,另外要考慮的是執行時暫用多少的記憶體,因為底層的 EC2 只有 1G 的記憶體。

檢查容器映像的狀態
圖 01、檢查容器映像的狀態

安裝並設定妥 AWS CLI
因為我們使用的 Amazon EC2 是 Amazon Linux 2 的 AMI ,所以不需再安裝 AWS CLI ,先檢查一下 CLI的版本

[ec2-user@ip-172-16-0-23 ~]$ aws --version
aws-cli/1.18.107 Python/2.7.18 Linux/4.14.193-149.317.amzn2.x86_64 botocore/1.17.31

因為我們需要透過 AWS CLI 將 EC2 內的映像檔上傳到 Amazon ECR ,所以必須讓AWS CLI有權限可以存取 Amazon ECR,這時候必須先讓目前的 AWS 使用者擁有使用AWS CLI的權限,這個權限必須在 Identity and Access Management (IAM)中得到授權。在 IAM 主控台中選擇登入管理主控台的帳號,在安全登入資料頁簽中,確認是否有建立存取金鑰,若有應該就會有一個檔案,通常檔名是 accessKeys.csv ,裡面會有兩個欄位,分別是 Access key ID, Secret access key。

透過 AMI 來取得存取金鑰
圖 02、透過 AMI 來取得存取金鑰

# 設定 AWS CLI 的存取憑證,需要指定 Access key ID, Secret access key, 所在區域,輸入格式,後面兩項是可選的
aws configure
# 取得Amazon ECR的授權,如果成功會出現 Login Succeeded 
(`aws ecr get-login --no-include-email --region ap-southeast-1`)

設定 AWS CLI
圖 03、設定 AWS CLI

據說如果是 AWS CLI 2 使用以下語法,有興趣的可以參閱Amazon ECR 登記
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

建立 Amazon ECR 儲存庫

輸入建立 Amazon ECR 儲存庫的語法,標明了儲存庫的名稱以及所在的區域

aws ecr create-repository \
    --repository-name ithome-repo \
    --image-scanning-configuration scanOnPush=true \
    --region ap-southeast-1

成功後會產出儲存庫的說明,以JSON方式輸出, repositoryUri 這個欄位就是下一步要上傳用的目標

{
    "repository": {
        "repositoryUri": "950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo",
        "imageScanningConfiguration": {
            "scanOnPush": true
        },
        "encryptionConfiguration": {
            "encryptionType": "AES256"
        },
        "registryId": "950646218716",
        "imageTagMutability": "MUTABLE",
        "repositoryArn": "arn:aws:ecr:ap-southeast-1:950646218716:repository/ithome-repo",
        "repositoryName": "ithome-repo",
        "createdAt": 1600778554.0
    }
}

使用 AWS CLI 建立儲存庫
圖 04、使用 AWS CLI 建立儲存庫

其實直接用管理主控台來操作也是可以的,進入 ECS 主控台,特別注意是進入 ECS 主控台, ECR 只是 ECS 的部分功能而已,選擇左邊選單中的 Amazon ECR 下的 Repositories,選擇 Create repository

ECS 主控台
圖 05、ECS 主控台

你會發現剛剛使用 AWS CLI 的設定都有,的確,有經驗的開發者其時會比較喜歡用 AWS CLI 的方式來操作,因為可以直接存成文件

使用主控台建立儲存庫
圖 06、使用主控台建立儲存庫

標記映像並上傳
為 ithome-container 映像標記上一步中的 repositoryUri 值。

docker tag ithome-container 950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo
# 使用先前步驟中的 repositoryUri 值,將映像推送至 Amazon ECR。
docker push 950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo

使用AWS CLI 上傳映像至儲存庫
圖 07、使用AWS CLI 上傳映像至儲存庫

ECS 主控台確認映像
圖 08、ECS 主控台確認映像

確認映像可以正常運作

登入另一台電腦使用的是 Ubuntu 16.04.6 LTS,而非 Amazon Linux 2

# 關閉伺服器的網頁伺服器
sudo /etc/init.d/apache2 stop
# 取得 Amazon ECR 存取權限,可能沒那麼簡單,還得重新設定一次
(`aws ecr get-login --no-include-email --region ap-southeast-1`)
# 下載映像檔
docker pull 950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo:latest
# 標籤映像檔
docker tag 950646218716.dkr.ecr.ap-southeast-1.amazonaws.com/ithome-repo:latest simple-php:latest 
# 執行映像檔
docker run -t -i -p 80:80 simple-php:latest

映像檔下載
圖 09、映像檔下載

映像檔標籤並執行
圖 10、映像檔標籤並執行

檢視執行結果
圖 11、檢視執行結果

References


上一篇
Amazon Elastic Container Service (Amazon ECS) - Day20
下一篇
使用 Container 進行 Auto Scaling Group (1) - Day22
系列文
AWS架構應用24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言