Amazon Elastic Container Registry (ECR) 笔记
Amazon Elastic Container Registry (ECR)
完成了 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的版本
[aaa@qq.com ~]$ 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。
图 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`)
图 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
}
}
图 04. 使用 AWS CLI 建立储存库
其实直接用管理控制台来操作也是可以的,进入 ECS 控制台,特别注意是进入 ECS 控制台, ECR 只是 ECS 的部分功能而已,选择左边选单中的 Amazon ECR 下的 Repositories,选择 Create repository
图 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
图 07. 使用AWS CLI 上传映像至储存库
图 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 Registry, https://aws.amazon.com/cn/ecr/
- 安装 AWS CLI,https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html
- docker-tutorial, https://github.com/twtrubiks/docker-tutorial
- Container指令基础, https://joshhu.gitbooks.io/dockercommands/content/Containers/ContainersBasic.html
hub.com/twtrubiks/docker-tutorial - Container指令基础, https://joshhu.gitbooks.io/dockercommands/content/Containers/ContainersBasic.html