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になります。
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)
}
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の画面からリポジトリの作成
を選択します。
リポジトリ名を入力してリポジトリの作成をクリックします。
今回はexampleにしてみます。
リポジトリが作成されました。
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にタグが作成されました。
ちなみにAWS CLIでも確認可能です。
$ aws ecr describe-images --repository-name example
{
"imageDetails": [
{
"registryId": "XXXXXXXXXX",
"repositoryName": "example",
"imageTags": [
"20190804"
],
"imageSizeInBytes": 296164653,
"imagePushedAt": 1564922252.0
}
]
}
参考にしたもの
Docker/Kubernetes 実践コンテナ開発入門
大変分かりやすい本でした。ありがとうございました。