Site icon Mr. 沙先生

如何從 DockerHub 遷移到 Amazon ECR Public

因為 DockerHub 在 2020/11/20 發布 rate limits by anonymous and Free Docker Hub users6 小時內不得超過 200 個 pull requests 導致眾多使用者哀嚎一片,其實 Docker 也維持了一段不短的 Free plan 以網路與運算資源來講這是一個很大的負擔,使用者收費也是現今很常見的一個 B2C 商業模式,所以作者並不意外。

也因為 Container 的用戶眾多在這次 AWS re:Invent,ECR 也釋出 Public 的開放平台讓 Container Users 多一個選擇,也許當遇到 Docker rate limits 時可以改用 ECR Public 作為解決方案,而這篇簡單介紹如何從 DockerHub 搬到 ECR Public。

Docker Image prepared

假使已經在 DockerHub 已經有 Image Repository 時將 Image pull 到本地

$ docker pull shazi7804/apache2-fcgid-worker-php7:7.4

或者是透過 Dockerfile 直接 Docker build

$ docker build .

Docker 設定 AWS Credential

Docker 要拿到 AWS Credential 總共有三個步驟要做:

// awscli login credential with key
$ export AWS_ACCESS_KEY_ID=<your-aws-access-key>
$ export AWS_SECRET_ACCESS_KEY=<your-aws-secret-key>

// docker login with aws ecr-public (public.ecr.aws), default use "us-east-1" region
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Login Succeeded

有出現 Login Succeeded 意味者 docker pull/push 可以透過 IAM 權限操作。

建立 ECR Public Repository

ECR Public Repository 可以透過 AWS Management Console 或 CLI 操作:

$ aws ecr-public create-repository \
     --repository-name apache2-fcgid-worker-php7 \
     --region us-east-1

建立完後拿到 API results

{
    "repository": {
        "repositoryArn": "arn:aws:ecr-public::381354187112:repository/apache2-fcgid-worker-php7",
        "registryId": "381354187112",
        "repositoryName": "apache2-fcgid-worker-php7",
        "repositoryUri": "public.ecr.aws/<your-alias-name>/apache2-fcgid-worker-php7",
        "createdAt": "2021-01-11T12:23:43.634000+08:00"
    },
    "catalogData": {}
}

其中 repositoryUri 是這個 Public Repository 的位置,預設會產生 random alias name,也可以到 AWS Management Console 設定 custom alias,而 catalogData 是這個 Repository 給使用者讀的介紹。

DockerHub Image 搬遷到 ECR Public

搬移的動作,其實就是改 docker push 到 ECR Public

$ docker tag shazi7804/apache2-fcgid-worker-php7:7.4 public.ecr.aws/<your-alias-name>/apache2-fcgid-worker-php7:7.4
$ docker push public.ecr.aws/<your-alias-name>/apache2-fcgid-worker-php7:7.4

之後就可以在 Amazon ECR Public Gallery 找到。

Amazon ECR Public 的出現並不見得是取代 DockerHub 而是讓使用者多一個選擇,當 A Plan 不適合時 B Plan 也許可以符合情境,更或許是小孩才做選擇兩個 Free tier 都可以作為 Image Provider。

Exit mobile version