それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dockerのプロキシ(docker mirror registry)を設置してdocker hubからのpullを早くする

docker pull が遅い。

docker hub からのpull が遅い。docker-machine を作ったりvirtualbox で遊んでたりすると遅いんですよ。docker pullが

軽量化?いいやキャッシュが先だ

「お前のDockerイメージはまだ重い」とかDockerイメージの軽量化かダイエットに関する記事も多いんだけど、その時間も惜しい。dockerのコンテナの目的の一つが時間の節約だ。alpineで、秘伝のスープみたいなDockerfile を書くためのノウハウを蓄積する時間をダイエットしたいんだ。

まずは、ダイエットに時間掛けるより先にキャッシュでなんとかしてみよう。

apt-cacher みたいなのほしい。

docker の build 時や起動時の apt も遅かったり、docker build 時にすぐキャッシュが消えて apt が再実行されるので apt-cacher も速くするのに有効だった。

幾つものmachine で次々やってると docker hub の遅さも辛い。

docker hub mirror registry を起動して使う

Registry as a pull through cache | Docker Documentation に詳しいことが書いてあった。

設定は次の通り

  1. docker registry に mirroring の設定をする
  2. 手元のdocker に mirroring を使うように設定する。

docker registry に mirroring の設定をする

docker hub はログインしないと使えないので、ミラー用につかうレジストリが docker hub にログインできるように設定する。

proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]

これは面倒くさいので、docker イメージにした。

Dockerfile

FROM registry:2


RUN echo -ne "\
proxy:\n\
  remoteurl: https://registry-1.docker.io\n\
  username: takuyaXXXXX\n\
  password: PASSWORDn\
" >> /etc/docker/registry/config.yml

起動すら面倒くさい

起動すら面倒くさいので makefile 書いておいた。

make run

docker-compose は apt-cacheや HTTPプロキシと併せて起動するように別に書いた。

githubにおいておいた。

github.com

docker に設定する。

Docker for Mac に設定した。docker for Macが、ミラーを使ってくれるように設定した。

f:id:takuya_1st:20180109005345p:plain:w200

効果測定

じゃあ、これでどれくらい時短が出来るのか。

最後にどれくらい速くなる?測定だ

mirror のキャッシュが効く前(初回ロード)

takuya@docker-compose$ time docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
50aff78429b1: Pull complete
f6d82e297bce: Pull complete
275abb2c8a6f: Pull complete
9f15a39356d6: Pull complete
fc0342a94c89: Pull complete
Digest: sha256:fbaf303d18563e57a3c1a0005356ad102509b60884f3aa89ef9a90c0ea5d1212
Status: Downloaded newer image for ubuntu:latest

real    0m19.145s
user    0m0.047s
sys 0m0.043s

mirror でのキャッシュしたあと

docker rmi ubuntu でキャッシュを消して 再度取得してみる。

$ time docker rmi ubuntu
$ time docker pull ubuntu

Using default tag: latest
latest: Pulling from library/ubuntu
50aff78429b1: Pull complete
f6d82e297bce: Pull complete
275abb2c8a6f: Pull complete
9f15a39356d6: Pull complete
fc0342a94c89: Pull complete
Digest: sha256:fbaf303d18563e57a3c1a0005356ad102509b60884f3aa89ef9a90c0ea5d1212
Status: Downloaded newer image for ubuntu:latest

real    0m4.883s
user    0m0.043s
sys 0m0.035s

比較

効果はバツグンだ。

導入前 導入後 時間差
19.145s 4.883s 14s

何処で使うのか。

イントラですよイントラ。

docker-machine が全部ミラー用を見るようにしておけば、virualbox などの docker-machineもバンバン使えるね。

参考資料