Dockerを使いたい。山﨑です。
周辺技術がどんどん成長していっているDockerを使い倒すべくブログと称してメモしとこうと思います。
今回はDockerそのものは置いといて、Docker Registry を使ってみたいと思います。
とはいえ、docker run
docker の基本中の基本。
Docker イメージをダウンロードし、コンテナを起動。
コンテナ内で echo を実行ということがコマンド一発で可能です。
(全くいみはない
$ docker run ubuntu /bin/echo "Hello Docker" Hello Docker
このコマンドでコンテナの元になるイメージがダウンロードされてコンテナが実行されるわけですが、
さて、ここでダウンロードしてくるイメージってどこにあるんでしょうか。
Docker Hub
正解はこちら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 namedubuntu
from the official Docker Hub. This is simply a shortcut for the longerdocker pull docker.io/library/ubuntu
commanddocker pull myregistrydomain:port/foo/bar
instructs docker to contact the registry located atmyregistrydomain:port
to find the imagefoo/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/