$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

社内用Docker Registryを立てる

 Dockerにはimageを登録しておくためのregistryが用意されていて、https://index.docker.io/ にPublicなイメージを登録しておくことが出来ます。また、社内用など、Publicには出したくない時も自分でregistryを立てることが出来ます。そこで、今回は社内用Docker Registryの立て方について書こうと思います。

 https://github.com/dotcloud/docker-registry を参考にします。

Docker Registryを立ち上げる

 立てるのはすごく簡単で、docker runするだけでした。

$ docker run -p 5000:5000 -d stackbrew/registry

 これで実行したhostの5000番portにDocker Registryを立てることができます。

 ここに対して、pushやpullをしたい場合は、host名を含めたtagを付ける必要があります。例えばこのhostの名前が private-docker-registry.com だったとすると

$ docker build -t private-docker-registry.com:5000/sample-app .
$ docker push private-docker-registry.com:5000/sample-app

のようにします。簡単ですね。

データのディレクトリをマウントする

 ただ、このままではDockerコンテナをstopしたらデータが消えてしまいます。そこでhostのディレクトリを、Docker Registryのデータディレクトリにmountして、データを永続化できるようにします。

 これも立ちあげ方を変えるだけです。これでDockerを立ちあげているhostの/var/registryが、Dockerコンテナ内の/tmp/registryにmountされ、Dockerコンテナがstopしても/var/registryに残り続けてくれます。

docker run -d -p 5000:5000 -v /var/registry:/tmp/registry stackbrew/registry

その他の立ちあげ方

https://github.com/dotcloud/docker-registry を見ると分かる通り、config.ymlをうまくいじることによって、S3にデータを保存するなどの事もできるようです。

S3-backed Private Docker Registry | blog.hansode.org この辺りも参考に

まとめ

 今回は簡単なDocker Registryの立て方について書きました。とりあえず試すくらいならこの程度で十分だと思います。