[docker][自分用メモ] Docker 18.09から正式になったBuildKitが思いのほか快適だった

     
    • 最終更新日時:2018/11/22 10:42:06

    Embed
    fancycrave-151127-unsplash.jpg
    Docker Engine 18.09リリース、BuildKitの搭載でコンテナビルドのスピードを最大9倍以上に高速化 - Publickey
    上記の記事のようにDocker 18.09からBuildKitと呼ばれる、Dockerfileからcontainerを作成するエンジンが正式版になったようです。

    今更ながら調べてみると、Experimentalとはいえ、18.06から提供になっていたんですね。知りませんでした。
    DockerCE18.06で使えるBuildKitを使おう - Qiita
    どうやらこのBuildKit、使用すると、

    - できる限り並列に実行する
    - キャッシュを有効活用する


    みたいですね。
    multi stage buildなDockerfileを使用していると、特に効果は大きいのだとか。

    というわけで実験。

    環境:
    なんかうちの環境では、experimentalを有効にする必要がありました。
    /etc/docker/daemon.json
    {
    "experimental": true
    }

    上記の設定を有効にするため、dockerサービスの再起動。
    $ docker version
    Client:
    Version: 18.09.0
    API version: 1.39
    Go version: go1.10.4
    Git commit: 4d60db4
    Built: Wed Nov 7 00:52:51 2018
    OS/Arch: linux/arm64
    Experimental: false

    Server: Docker Engine - Community
    Engine:
    Version: 18.09.0
    API version: 1.39 (minimum version 1.12)
    Go version: go1.10.4
    Git commit: 4d60db4
    Built: Wed Nov 7 00:17:01 2018
    OS/Arch: linux/arm64
    Experimental: true


    有効になっていることを確認したら、docker buildしてみます。
    実行前には、環境変数:DOCKER_BUILDKIT=1を設定するようにしてください。
    ~/docker-build$ DOCKER_BUILDKIT=1 docker build --rm -t kometchtech/kresd -f kresd/Dockerfile.alpine kresd/
    [+] Building 307.6s (11/11) FINISHED
    => [internal] load .dockerignore 0.1s
    => => transferring context: 2B 0.0s
    => [internal] load build definition from Dockerfile.alpine 0.1s
    => => transferring dockerfile: 4.05kB 0.0s
    => [internal] load metadata for docker.io/arm64v8/alpine:edge 0.0s
    => CACHED [runtime 1/2] FROM docker.io/arm64v8/alpine:edge 0.0s
    => CACHED [internal] helper image for file operations 0.0s
    => [knot-dns-build 2/2] RUN set -x && echo @test http://dl-cdn.alpinelinux.org/alpine/edge/testing | tee -a /etc/apk/r 232.4s
    => [build 1/1] RUN git clone --recursive https://github.com/CZ-NIC/knot-resolver.git /tmp/knot-resolver && cd /tm 66.7s
    => CACHED [runtime 2/2] RUN set -x && echo http://dl-cdn.alpinelinux.org/alpine/edge/testing | tee -a /etc/apk/reposi 0.0s
    => [stage-3 1/2] COPY --from=build /tmp/root/ / 3.7s
    => [stage-3 2/2] RUN ldconfig / || true 3.3s
    => exporting to image 0.6s
    => => exporting layers 0.6s
    => => writing image sha256:355cc3b5c28b7c3ccafbad84fb70ac7742b2855707e4a48cdb372ca386eb053d 0.0s
    => => naming to docker.io/kometchtech/kresd 0.0s

    見てわかると思いますが、どの部分でCACHEを使用している、とか、multi stage buildになっている部分はここだよ、とか、各layerごとの処理時間なども出力されています。
    実行中の出力を見ると、並列実行されているところも確認できるので、以前までシーケンシャルに実行されていた時と比較すると、だいぶ処理時間を減らすことができるかと思います。

    今回使用したDockerfileは以下においてあります。
    docker-build/kresd at master · kometchtech/docker-build
    大きめなDockerfileのcontainer buildするときも、だいぶ処理時間を削減できると思うので、これからはBuildKitを活用していきたいです。
    関連記事


    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/2181-e569b1ba

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometchtech

    Author:kometchtech
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。
    2018年6月、Xperia XZ1 compactに機種変。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    01 | 2019/02 | 03
    - - - - - 1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 - -

    記事リスト

    最新の記事

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FCカウンター

    オンライン

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング