boot2docker + Amazon S3でdocker private registry そして...
DockerのプライベートレジストリのバックエンドをS3で実現されている「docker-registry と Amazon S3 で作る自分だけのコンテナ倉庫(リポジトリ) - ようへいの日々精進」を参考に
boot2dockerで稼働しているDockerでもレジストリのフロントエンドを稼働させることができたので、
ローカル(boot2docker docker) -> S3へのPush/Pullができるようになりました。
サーバ節約!
インターネット上のさーばにDockerコンテナをpullする時は別途Docker registryが必要になるのですが・・・
- Registry用Dockerコンテナ起動
orenomac$ docker run -d -p 49500:5000 -e SETTINGS_FLAVOR=prod docker-s3/registry /docker-registry/run.sh dd1e9b3a0539d618d5454e86bc0f4591569c105702fc92ba4b05f70e7d844540 orenomac$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd1e9b3a0539 docker-s3/registry:latest /docker-registry/run 1 seconds ago Up 2 seconds 0.0.0.0:49500->5000/tcp stupefied_ritchie
- 僕僕Registryに登録
orenomac$ docker tag centos/webserver localhost:49500/centos-webserver orenomac$ docker push localhost:49500/centos-webserver The push refers to a repository [localhost:49500/centos-webserver] (len: 1) Sending image list Pushing repository localhost:49500/centos-webserver (1 tags) 539c0211cd76: Image successfully pushed 244e53897526: Image successfully pushed 11cee5f445aa: Image successfully pushed ee8a750c7eb9: Image successfully pushed cf42203ce8a3: Image successfully pushed ef938d1b58aa: Image successfully pushed e522db37eeb8: Image successfully pushed bd3f354c0eaf: Image successfully pushed 8c0dec6a99ac: Image successfully pushed 567cadb0a3a4: Image successfully pushed ce84df388d67: Image successfully pushed Pushing tag for rev [ce84df388d67] on {http://localhost:49500/v1/repositories/centos-webserver/tags/latest}
- 僕僕Registryからpull
orenomac$ docker pull localhost:49500/centos-webserver Pulling repository localhost:49500/centos-webserver ce84df388d67: Download complete 539c0211cd76: Download complete 244e53897526: Download complete 11cee5f445aa: Download complete ee8a750c7eb9: Download complete cf42203ce8a3: Download complete ef938d1b58aa: Download complete e522db37eeb8: Download complete bd3f354c0eaf: Download complete 8c0dec6a99ac: Download complete 567cadb0a3a4: Download complete
さてここから
Amazon CloudFrontでpullを高速化できるかな?
CloudFrontでDockerのレジストリに登録したデータを配信してみましょう。
- Dockerレジストリの準備
- CloudFrontの準備
EC2(c3.large)にCentOS6.5を稼働させてS3をバックエンドとするDockerレジストリを準備しました。
- オリジンサーバからのpull(2:08.22)
orenomac$ time docker pull <origin>/centos-webserver Pulling repository <origin>/centos-webserver ce84df388d67: Download complete 539c0211cd76: Download complete 244e53897526: Download complete 11cee5f445aa: Download complete ee8a750c7eb9: Download complete cf42203ce8a3: Download complete ef938d1b58aa: Download complete e522db37eeb8: Download complete bd3f354c0eaf: Download complete 8c0dec6a99ac: Download complete 567cadb0a3a4: Download complete docker pull <origin>/centos-webserver 0.06s user 0.05s system 0% cpu 2:08.22 total
オリジンサーバからのダウンロードはOKです。
CloudFrontドメインを指定するとCDN経由でpullできるはず・・・
Docker Registry <-> CloudFront -> PC
- 1回目(2:21.89)
orenomac$ time docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver Pulling repository d285hgqainxm96.cloudfront.net:80/centos-webserver ce84df388d67: Download complete 539c0211cd76: Download complete 244e53897526: Download complete 11cee5f445aa: Download complete ee8a750c7eb9: Download complete cf42203ce8a3: Download complete ef938d1b58aa: Download complete e522db37eeb8: Download complete bd3f354c0eaf: Download complete 8c0dec6a99ac: Download complete 567cadb0a3a4: Download complete docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver 0.06s user 0.06s system 0% cpu 2:21.89 total
- 2回目(2:04.55)
アンタグしてから再度pullします
orenomac$ docker rmi d285hgqainxm96.cloudfront.net:80/centos-webserver Untagged: d285hgqainxm96.cloudfront.net:80/centos-webserver:latest Deleted: ce84df388d674cc068150ddcd59f74f3a594320296a94f6e338130282f15e25f Deleted: 567cadb0a3a44596115afc8e7efeb67e9c7f85a21b6b404777c82c05ec68080a Deleted: 8c0dec6a99acf3e937dc349c3a56f60077aec38683d15107801fda88e68683ae Deleted: bd3f354c0eaf6abf2edf2ed6c6e3b6bb944a3ced182d73d2816e2fbe88699bfa Deleted: e522db37eeb8800f5822486a73bec23f2f9dfdd1e135d48d376e5c43975bc2e5 Deleted: ef938d1b58aa86242c6aa9c6ed641fa352617a351e815eb9e55d4679fecba39d
orenomac$ time docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver Pulling repository d285hgqainxm96.cloudfront.net:80/centos-webserver ce84df388d67: Download complete 539c0211cd76: Download complete 244e53897526: Download complete 11cee5f445aa: Download complete ee8a750c7eb9: Download complete cf42203ce8a3: Download complete ef938d1b58aa: Download complete e522db37eeb8: Download complete bd3f354c0eaf: Download complete 8c0dec6a99ac: Download complete 567cadb0a3a4: Download complete docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver 0.06s user 0.04s system 0% cpu 2:04.55 total
- 3回目(2:30.81)
もちろんアン(ry
orenomac$ time docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver Pulling repository d285hgqainxm96.cloudfront.net:80/centos-webserver ce84df388d67: Download complete 539c0211cd76: Download complete 244e53897526: Download complete 11cee5f445aa: Download complete ee8a750c7eb9: Download complete cf42203ce8a3: Download complete ef938d1b58aa: Download complete e522db37eeb8: Download complete bd3f354c0eaf: Download complete 8c0dec6a99ac: Download complete 567cadb0a3a4: Download complete docker pull d285hgqainxm96.cloudfront.net:80/centos-webserver 0.06s user 0.05s system 0% cpu 2:30.81 total
・・・
あかんテストの仕方悪い気がする。
- Cloud Frontから取得出来てるっぽいけどキャッシュしてなくね
- docker registryのアプリケーションログ見てないですすいませんすいません
- ぼく宅の回線がm9(^Д^)プギャーの可能性
- Private Distributionパターンと組み合わせたら爆速プライベートpullできるんじゃねーの?って思ったんだけど
- CloudFrontのDomain Nameを指定してpullすることでコンテナデプロイ先のEC2がリージョン跨いでてもpull早くなるのかなって思ったんだけど
一旦やり方など考えなおそう。なんとなくやってみたんだけどうまくいかないというか突貫すぎた。
そもそもこれを試したいわけじゃなかったんだー。AWSのサービスは誘惑が多い。
- その他
EC2上でDockerレジストリのフロントエンドを起動するために初めてIAM Roleを使いました。ありがとうIAM Role
感謝。