学习使用aws的服务,说实话,单靠看官方的文档很难理解,只有自己动手操作才知道有多少坑需要填。我自己注册了一个aws账号,用于学习aws的一些服务。一年前我也在阿里云买了一台机器用于学习,那时候还是套信用卡买的,五年两千多,2核4g。不过aws的服务,你练手的时候收费,服务不启动就不会收费,这点还是挺好的。
在aws的ec2实例上需要使用该命令安装docker,以获得aws对docker做的扩展,如使用aws ecr命令。
### 安装docker
amazon-linux-extras install docker
安装完成后,需要配置AccessKey和Secret,可在aws控制台创建一个用户,为其分配ecs和ecr的相关访问权限,并创建组将用户添加到组,就可以使用这个用户AccessKey和Secret访问ecr。
分配权限
其中红框部分是使用ECR的必要权限,ECR就是aws上的docker镜像仓库,每个用户都拥有一个。
在使用docker命令访问ecr之前,都需要获取用户名密码以登陆到私有ecr仓库。
You must specify a region. You can also configure your region by running "aws configure".
使用aws configure配置key和密钥
[root@ip-172-31-45-6 ec2-user]# aws configure
AWS Access Key ID [None]: AKIAXYYUCGMS2XDXPG7C (用户的key)
AWS Secret Access Key [None]: b7a/Sav/hhecv......l0sZuP (密钥)
Default region name [None]: us-east-2 (区域)
Default output format [None]: (这里是邮件,可以不填写)
或者直接使用这条命令,就不需要填写Default region name和Default output format
aws ecr get-login --region 【region,如:us-east-2】 --no-include-email
使用aws ecr get-login会返回一串用于docker login的命令,前提是配置正确的Access Key和Secret Access以及选择的区域us-east-2。
docker login -u AWS -p eyJwYXlsb2FkIjoiajY3eW1KbmNr..... -e none https://[aws_account_id].dkr.ecr.[regin].amazonaws.com
这串字符串就是一条docker login命令,可直接复制执行,去掉后面的-e参数。此命令提供一个在12 小时内有效的授权令牌,12小时内都使用使用这条命令登陆。
docker login -u AWS -p eyJwYXlsb2FkIjoiajY3eW1KbmNr..... https://[aws_account_id].dkr.ecr.[regin].amazonaws.com
解释:
url:https://[aws_account_id].dkr.ecr.[regin].amazonaws.com私有镜像仓库的地址,其中[aws_account_id]是你的aws账号名;[regin]是区域(regin),比如俄罗俄岗是us-east-2。
现在就可以访问私有的aws ecr镜像仓库了。可以读取和写入默认镜像仓库中的存储库。
注意:提前是你配置了用户拥有相应的权限(即角色)。
AmazonEC2ContainerRegistryPowerUserAmazonEC2ContainerRegistryReadOnlyAmazonEC2ContainerRegistryFullAccess
提交本地镜像到aws ecr镜像仓库
先创建一个简单的镜像,如base-centos:7。
docker image build --tag base-centos:7 .
将本地镜像base-centos:7打标签映射到远程ecr仓库
docker tag [aws_account_id].dkr.ecr.[regin].amazonaws.com/base-centos:7 base-centos:7
先登陆到aws控制台,打开ECR,创建一个base-centos仓库,再执行push命令,才能push上去。
docker push [aws_account_id].dkr.ecr.[regin].amazonaws.com/base-centos:7
从aws ecr镜像仓库拉取镜像
使用aws ecr describe-repositories可以查看所有的镜像仓库
[root@ip-172-31-1-1 docker]# aws ecr describe-repositories
{
"repositories": [
{
"registryId": "534228644645",
"repositoryName": "base-centos",
"repositoryArn": "arn:aws:ecr:....pository/base-centos",
"createdAt": 1578287230.0,
"repositoryUri":"[aws_account_id].dkr.ecr.[regin].amazonaws.com/base-centos"
}
]
}
[root@ip-172-31-45-6 docker]#
使用aws ecr describe-images --repository-name可以获取某个镜像仓库的详情
[root@ip-172-31-1-1 docker]# aws ecr describe-images --repository-name base-centos
{
"imageDetails": [
{
"imageSizeInBytes": 75782895,
"imageDigest": "sha256:........",
"imageTags": [
"7"
],
"registryId": "534228644645",
"repositoryName": "base-centos",
"imagePushedAt": 1578287256.0
}
]
}
将本地镜像删除,再从远程仓库拉取镜像。
docker pull [aws_account_id].dkr.ecr.[regin].amazonaws.com/base-centos:7
本篇主要意图是介绍如何使用aws的ecr,扫清入门的阻碍,了解更多可看官方文档:
https://docs.aws.amazon.com/zh_cn/AmazonECR/latest/userguide/docker-pull-ecr-image.html
我感觉都可以问aws要广告费了,哈哈!如果你想了解更多aws服务的使用,可给我留言,我会安排时间写一些aws服务的使用教程,以及分享使用经验。前提是不要那种收费贵的,笔者有点穷,哈哈。
这是我的微信公众号哟:Java艺术