Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@YutaSaito1991

Dockerイメージをレジストリに登録する(ECR含む)

More than 1 year has passed since last update.

Dockerイメージの登録についてまとめておきます。

ローカルレジストリに登録

ローカルレジストリを作成

ローカル環境にdockerレジストリを作成します。
Docker Hubに公式イメージの「registry」が用意されていますので、今回はこちらを利用します。

以下コマンドで5000番ポートにレジストリを立ち上げます。

$ docker image pull registry:latest
$ docker container run -t -p 5000:5000 registry:latest

登録するDockerイメージを作成します。

今回はgo言語でHello World!!を返却するWebアプリを作成してみます。
以下2つのファイルが今回利用するgoのWebアプリケーションとDockerfileになります。

main.go
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello World!!")
    })

    http.ListenAndServe(":8080", nil)
}
Dockerfile
FROM golang:latest

COPY main.go /go/src/
CMD ["go", "run", "/go/src/main.go"]
ビルドします
$ docker image build -t example/go:latest .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM golang:latest
 ---> 9fe4cdc1f173
Step 2/3 : COPY main.go /go/src/
 ---> Using cache
 ---> 38b645fa14c8
Step 3/3 : CMD ["go", "run", "/go/src/main.go"]
 ---> Using cache
 ---> 273a059475c4
Successfully built 273a059475c4
Successfully tagged example/go:latest
タグをつけます

形式はdocker image tag [ローカルのイメージ名]:[タグ名] [リポジトリ名][イメージ名]:[タグ名]になります。

$ docker image tag example/go:latest localhost:5000/example/go:20190804

Dockerイメージを作成したレジストリに登録します。

以下コマンドでDockerイメージをレジストリに登録することが可能です。
docker image push [リポジトリURL][作成したタグ名]

$ docker image push localhost:5000/example/go:20190804

作成されたことを以下のコマンドで確認可能です。

$ curl http://localhost:5000/v2/_catalog
{"repositories":["example/go"]}

念のためレジストリからローカルにpullしてみます。

最初にローカルにあるタグを削除します。

$docker image rm localhost:5000/example/go:20190804
$ docker image ls | grep example/go
example/go                                                       latest              e4a2773a9830        14 minutes ago      781MB

20190804のタグは削除されました。

pullします。

$ docker pull localhost:5000/example/go:20190804
20190804: Pulling from example/go
Digest: XXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Status: Downloaded newer image for localhost:5000/example/go:20190804
localhost:5000/example/go:20190804
$ docker image ls | grep example/go
example/go                                                       latest              e4a2773a9830        15 minutes ago      781MB
localhost:5000/example/go                                        20190804            e4a2773a9830        15 minutes ago      781MB

5000番ポートに作成したレジストリからpull出来ました。

ECRに登録する

次にECRに登録してみます。
aws cliの設定は既に終わっている前提とします。

ECRにリポジトリを作成

ECRの画面からリポジトリの作成を選択します。

スクリーンショット 2019-08-04 21.20.34.png

リポジトリ名を入力してリポジトリの作成をクリックします。
今回はexampleにしてみます。

スクリーンショット 2019-08-04 21.21.46.png

リポジトリが作成されました。

スクリーンショット 2019-08-04 21.25.57.png

ECRにpushする

ECRにログイン
$(aws ecr get-login --no-include-email)
レジストリを確認します
$ aws ecr describe-repositories

{
    "repositories": [
        {
            "repositoryArn": "arn:aws:ecr:ap-northeast-1:XXXXXXXXXXXX:repository/example",
            "registryId": "XXXXXXXXXXXX",
            "repositoryName": "example",
            "repositoryUri": "XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/example",
            "createdAt": 1564921553.0
        }
    ]
}
pushします

push先のリポジトリはECRで作成したリポジトリになります。
ECRの画面にあるURIを指定します。

$ docker image tag example/go:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/example:20190804
$ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/example:20190804

ECRにタグが作成されました。

スクリーンショット 2019-08-04 21.37.52.png

ちなみにAWS CLIでも確認可能です。

$ aws ecr describe-images --repository-name example
{
    "imageDetails": [
        {
            "registryId": "XXXXXXXXXX",
            "repositoryName": "example",
            "imageTags": [
                "20190804"
            ],
            "imageSizeInBytes": 296164653,
            "imagePushedAt": 1564922252.0
        }
    ]
}

参考にしたもの

Docker/Kubernetes 実践コンテナ開発入門
大変分かりやすい本でした。ありがとうございました。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
YutaSaito1991
事業会社でWebアプリケーションエンジニアをしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?