はじめに
- コンテナイメージは index.docker.io にだけ保存出来ると思っていたら個人でもリポジトリを持てるらしい
- しかも、コンテナイメージを Amazon S3 に保存出来るらしいので課金に注意しつつ*1そちらで試してみる!
- 尚、リポジトリの環境自体もコンテナイメージで配布されているのでそちらを利用する
- docker-registry は Gunicorn という python の WSGI HTTP サーバーで実装されている
参考
準備
docker-registry コンテナイメージを pull してくる
せっかくなんで docker クライアント for MacOS X でやってみる。
docker pull registry
と言っても特に何が変わる訳でもない。pull が終わったら念のために docker images で確認。
registry 0.6.3 c83860e35b87 2 days ago 486.2 MB registry 0.6.2 3ca16857b223 2 days ago 631.9 MB registry 0.6.1 66759ecd01fe 2 days ago 456.3 MB registry 0.6.0 b0b73ff92e85 2 days ago 631.9 MB registry 0.5.9 bbea61b447e3 2 days ago 631.6 MB registry 0.6.4 e623ba69ccc9 2 days ago 486.2 MB registry latest e623ba69ccc9 2 days ago 486.2 MB
S3 上にイメージ倉庫用バケットを作成する
aws s3api create-bucket --bucket dockercontainer
以下のようにバケット作成される。
{
"Location": "/dockercontainer"
}
一応、確認。
aws s3api list-buckets | jq -r '.Buckets[]|select(.Name |contains("docker"))'
以下のように出力される。
{
"Name": "dockercontainer",
"CreationDate": "2014-01-25T09:56:47.000Z"
}
registry コンテナで S3 を利用出来るようにする
一旦、registry を起動して config.yml を修正する。
docker run -t -i registry /bin/bash
config.yml は /docker-registry/config/config_s3.yml をコピーして利用する。
mv /docker-registry/config/config.yml /docker-registry/config/config.yml.original cp /docker-registry/config/config_s3.yml /docker-registry/config/config.yml
config.yml はマニュアルに従い、以下のように設定する。
prod:
storage: s3
boto_bucket: dockercontainer
s3_access_key: AK1234567890123
s3_secret_key: ABCDEFGHIJKLMNOPQRSTUVWXYZ1
s3_bucket: dockercontainer
s3_encrypt: true
s3_secure: true
secret_key: hogehuga
s3_encrypt: true
s3_secure: true
storage_path: /images
修正したらコンテナをコミットしておく。
docker commit ${CONTAINER_ID} inokappa/registry
以下のような Dockerfile を用意して docker build して良いかも。
FROM registry # MAINTAINER YOHEI KAWAHARA inokappa # ADD config_s3.yml /docker-registry/config/config.yml # EXPOSE 5000 CMD ["/docker-registry/run.sh"]
試してみる
構成
コンテナを起動することで以下のような構成となる。

registry コンテナを起動!
以下のようにして registry コンテナを起動する。
docker run -d -p 5000 -e SETTINGS_FLAVOR=prod inokappa/registry /docker-registry/run.sh
Dockerfile からビルドした場合には以下のように起動出来る。
docker run -d -p 5000 -e SETTINGS_FLAVOR=prod registry-test
起動したら念のために docker ps で確認する。

ゴージャスにコンテナを 2 つも起動した*2。動作確認として curl を使ってアクセスしてみる。
curl http://${DockerServer}:${BINDPORT}/
以下のように出力されればとりあえず起動はオッケー。

ubuntu コンテナを登録してみる
ubuntu コンテナを pull してくる。
docker pull ubuntu
docker tag でタグ付する。
docker tag ubuntu ${DockerServer}:${BINDPORT}/ubuntu
docker pull する。
docker pull ${DockerServer}:${BINDPORT}/ubuntu
以下のように S3 に push が開始する。

おお、並行して aws-cli を使って aws s3 ls を使って本当にアップロードされているかを確認する。
aws s3 ls s3://dockercontainer/images/repositories/library/

docker run してみる
以下のようにコンテナを起動する。
docker run -i -t ${DockerServer}:${BINDPORT}/ubuntu /bin/bash
起動したコンテナに apache2 をインストールする。
apt-get update apt-get -y install apache2
commit して push してみる
apache2 をインストールしたコンテナを終了した後に以下のようにコミットする。
docker commit 6e7a44bf3804 ${DockerServer}:${BINDPORT}/ubuntu
さらに push する。
docker push ${DockerServer}:${BINDPORT}/ubuntu
