概要
2018/07/19にリリースされたDockerの18.06バージョンでは、BuildKitというものが実験的に統合されて使えるようになり、
ビルドが30倍速くなる(こともある)! とDockerのMeetupで教えてもらったので、Docker初心者がそれを試す手がかりとして、これを残します。
紹介されていたのは、こちらの資料です。
DockerCon参加報告 (docker build
が30倍以上速くなる話など)
なぜ速くなるのか
ものすごく簡単に言ってしまうと、2点だと思います。
- 並列処理するから
- キャッシュを有効活用するから
これまでマルチステージでDockerfileを書いていても、上から順に、シーケンシャルにしか処理してくれませんでした。
それを依存関係を加味して、並列で実行することで処理時間を短縮しよう、と。
また、mavenやgoなどで使ったパッケージマネージャのリソース、aptやyumのキャッシュを有効に使うことで処理時間を短縮しよう、というアプローチのように見えます。
キャッシュを使う RUN --mountは、今のDockerfileを書き換えないとできませんが、並列ビルドは 今お使いのDockerfile そのままで使える、と言われたら魅力的ではありませんか?
環境準備
Dockerのバージョンアップ
Dockerのバージョンを18.06にします。
ちゃんと18.06になっているか、コマンドでも確認しておきましょう。
docker --version
環境変数の設定
スライドにあるように、環境変数を設定します。
export DOCKER_BUILDKIT=1
experimentalを有効にする。
実験的に統合
ということなので、experientalを有効にします。
有効になっているかどうかの確認
docker version
と入力して、表示された内容を確認します。
ServerのところのExperimentalがfalseになっていたら、有効になっていません。次に進みましょう。
Experimentalを有効にする
/etc/docker/daemon.json を以下の内容で作成します。
{
"experimental": true
}
/etc/dockerの所有者が誰になっているかを確認して、必要であればsudoするなりして編集しましょう。
aws ec2でubuntu環境でDockerを入れて試していますが、ここはrootになっていました。
編集が終ったらdockerを再起動します。
sudo service docker restart
有効になっているか確認
再度確認してみます。
docker version
Experimentalがtrueになっていることを確認してください。
普通にdocker build
今まで白い文字に、たまにエラーや警告の赤い文字だったビルド画面が、青っぽい画面になりました。
全く同じDockerfileを、DOCKER_BUILDKIT=0にしてやってみると、こんな感じのものです。
単純なDockerfileだったため、30倍!というほど顕著な改善は見られませんでしたが、
「今のままそのままで、速くなる」というのであれば、やらない手はないです!
トラブルシュート
buildkit not supported by daemon
こんなエラーがdocker buildを実行したときに返された方は、docker versionでexperimentalがtrueになっているか、有効になっているかをご確認ください。
Experimentalがfalseだと、このエラーになります。
なお、ClientとServerの両方にExperimentalがありますが、設定するのはServerの方でした。
情報入手元
Dockerステッカー ありがたく頂戴いたしました。