AWS上的Docker镜像仓库之ECR

2,946 阅读3分钟

学习使用aws的服务,说实话,单靠看官方的文档很难理解,只有自己动手操作才知道有多少坑需要填。我自己注册了一个aws账号,用于学习aws的一些服务。一年前我也在阿里云买了一台机器用于学习,那时候还是套信用卡买的,五年两千多,24g。不过aws的服务,你练手的时候收费,服务不启动就不会收费,这点还是挺好的。

awsec2实例上需要使用该命令安装docker,以获得awsdocker做的扩展,如使用aws ecr命令。

### 安装docker
amazon-linux-extras install docker

安装完成后,需要配置AccessKeySecret,可在aws控制台创建一个用户,为其分配ecsecr的相关访问权限,并创建组将用户添加到组,就可以使用这个用户AccessKeySecret访问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 nameDefault output format

aws ecr get-login --region 【region,如:us-east-2】 --no-include-email

使用aws ecr get-login会返回一串用于docker login的命令,前提是配置正确的Access KeySecret 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镜像仓库了。可以读取和写入默认镜像仓库中的存储库。

注意:提前是你配置了用户拥有相应的权限(即角色)。

  • AmazonEC2ContainerRegistryPowerUser
  • AmazonEC2ContainerRegistryReadOnly
  • AmazonEC2ContainerRegistryFullAccess

提交本地镜像到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

本篇主要意图是介绍如何使用awsecr,扫清入门的阻碍,了解更多可看官方文档:

https://docs.aws.amazon.com/zh_cn/AmazonECR/latest/userguide/docker-pull-ecr-image.html

我感觉都可以问aws要广告费了,哈哈!如果你想了解更多aws服务的使用,可给我留言,我会安排时间写一些aws服务的使用教程,以及分享使用经验。前提是不要那种收费贵的,笔者有点穷,哈哈。

这是我的微信公众号哟:Java艺术