Tagbangers Blog

Dockerを使いたい Docker Registry

Dockerを使いたい。山﨑です。

周辺技術がどんどん成長していっているDockerを使い倒すべくブログと称してメモしとこうと思います。

今回はDockerそのものは置いといて、Docker Registry を使ってみたいと思います。

とはいえ、docker run

docker の基本中の基本。

Docker イメージをダウンロードし、コンテナを起動。

コンテナ内で echo を実行ということがコマンド一発で可能です。

(全くいみはない

$ docker run ubuntu /bin/echo "Hello Docker"
Hello Docker

このコマンドでコンテナの元になるイメージがダウンロードされてコンテナが実行されるわけですが、

さて、ここでダウンロードしてくるイメージってどこにあるんでしょうか。


Docker Hub

https://hub.docker.com/

正解はこちらDocker Hubからイメージをダウンロードしてきます。

Docker Hubには公式イメージ、ユーザーが独自に作成したイメージがあります。

イメージの公式非公式は docker search を使って調べるのが便利です。

OFFICIAL に [OK] がついているものが公式のイメージです。

また、STARの数も分かるので公式で無いイメージを使うときは参考になるかもしれません。

docker search tomcat
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                            Apache Tomcat is an open source implementa...   1206      [OK]
dordoka/tomcat                    Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   31                   [OK]
davidcaste/alpine-tomcat          Apache Tomcat 7/8 using Oracle Java 7/8 wi...   15                   [OK]
cloudesire/tomcat                 Tomcat server, 6/7/8                            12                   [OK]

Private Repository

Docker Hubのイメージは基本的には全世界に向けて公開されます。

公開したくない。

そんなときは、 Private Repository を追加することで非公開の Repository を作成し イメージも非公開にすることができます。

この Private Repository は 無料アカウントでも1つ使用することができ、追加で必要な場合はお金を払えば Repository の追加も可能です。

https://hub.docker.com/account/billing-plans/

自分で管理する

Docker Registry imageを使って自前の Docker Hub のようなものを作ることも簡単にできます。

やってみる

ローカルで Docker Registry コンテナを動かしてみましょう。

Docker Registry imageをpull 

$ docker pull registry:2
2: Pulling from library/registry
Digest: sha256:28be0609f90ef53e86e1872a11d672434ce1361711760cf1fe059efd222f8d37
Status: Downloaded newer image for registry:2

何も考えずにコンテナ起動

$ docker run -d --name local-registry -p 5000:5000 registry:2

何かpushしてみる

$ docker tag localhost:5000/busybox
$ docker tag busybox localhost:5000/busybox
$ docker push localhost:5000/busybox
The push refers to a repository [localhost:5000/busybox]
38ac8d0f5bb3: Pushed
latest: digest: sha256:2efce9f5b0cb8815d192ae634b4c87943d0f0b873d98487ee98f8ed0504bd572 size: 527

push する前に image に変な名前を付けましたがこういうことみたいです。

https://docs.docker.com/registry/introduction/#understanding-image-naming

Understanding image naming

Image names as used in typical docker commands reflect their origin:

  • docker pull ubuntu instructs docker to pull an image named ubuntu from the official Docker Hub. This is simply a shortcut for the longer docker pull docker.io/library/ubuntu command
  • docker pull myregistrydomain:port/foo/bar instructs docker to contact the registry located at myregistrydomain:portto find the image foo/bar

本当に push できたんでしょうか。。。確認してみます。

$ docker exec -it local-registry /bin/sh
/ # ls /var/lib/registry/docker/registry/v2/repositories/
busybox

できてるみたいです。

ただ、単純に実行するだけではローカルにimageを保存しているだけなので、共有するために image の保存先を S3 に してみましょう。

このあたりを参考に設定してみます。

https://docs.docker.com/registry/configuration/

https://github.com/docker/distribution/blob/master/cmd/registry/config-example.yml

https://github.com/docker/docker.github.io/blob/master/registry/storage-drivers/s3.md

version: 0.1
storage:
  s3:
    accesskey: accesskey
    secretkey: secretkey
    bucket: s3-bucket
    region: ap-northeast-1
log:
  fields:
    service: registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3


最初に程起動した registry コンテナは削除しましょう

docker stop local-registry && docker rm -v local-registry

そして、設定を元にコンテナを起動してみます

docker run -d -p 5000:5000 --name local-registry-s3 -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2

更に push & pull

$ docker push localhost:5000/busybox
The push refers to a repository [localhost:5000/busybox]
38ac8d0f5bb3: Pushed

$ docker pull localhost:5000/busybox
Using default tag: latest
latest: Pulling from busybox


なんとも簡単に S3 の保存まで出来てしましました。便利すぎる。

さて、次回以降も Docker を使った開発環境の構築や、Docker Compose、Docker Swarm いろいろと触っていきたいと思います。


(おまけ)フルマネージドな registry サービス

Amazon EC2 Container Registry

https://aws.amazon.com/jp/ecr/

CONTAINER REGISTRY ( GCP )

https://cloud.google.com/container-registry/

Azure Container Registry

https://azure.microsoft.com/ja-jp/services/container-registry/