はじめに
- コンテナイメージは 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