Docker for Macで新イメージビルダーBuildKitを使う


# 目的

Dockerの`18.06.0-ce`においてexperimentalな機能として
Dockerのコンテナイメージビルダとして[BuildKit](https://github.com/moby/buildkit)が組み込まれました。
その利用方法を説明します。

# 使い方

edge版を導入し、Engineのversionが`18.06.0-ce-rc3`であることを確認する。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/40692/1559d042-0b34-2d54-5bf2-9b6d13604857.png)


Dockerのドロップダウンメニューから`Preferences`を開く。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/40692/9938776e-4e2b-ae73-b6fe-9d2e94d8a60d.png)


`Experimental`のチェックボックスをONにして、`Apply & Restart`ボタンをクリックしてdockerを再起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/40692/d1d71204-a1fa-75ad-f6f1-895e1d822bc4.png)



```bash:docker-infoの結果
$ docker info
Containers: 20
 Running: 20
 Paused: 0
 Stopped: 0
Images: 25
Server Version: 18.06.0-ce-rc3
〜〜〜〜〜中略〜〜〜〜〜
Labels:
Experimental: true　　# ここがtrueになっていることを確認する
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
```

環境変数に`DOCKER_BUILDKIT=1`を追加する。
`~/.bash_profile`の末尾にでも入れればいいのではないかな。

```bash:DockerのCLI側設定
$ echo 'DOCKER_BUILDKIT=1' >> ~/.bash_profile
$ source ~/.bash_profile
$ env | grep DOCKER_BUILDKIT
DOCKER_BUILDKIT=1
```

イメージをビルドするといつも見慣れたイメージビルドの表示ではなく、
あまり見慣れない感じで進みます。
**一部のビルドステップが並列で進むことも確認できました。**

```bash:動作確認
$ docker build -t test -f ./dockerfile/test `pwd`
[+] Building 13.5s (8/8) FINISHED
 => local://dockerfile (test)                                               0.0s
 => => transferring dockerfile: 212B                                               0.0s
 => local://context (.dockerignore)                                                0.0s
 => => transferring context: 02B                                                   0.0s
 => CACHED docker-image://docker.io/tonistiigi/copy:v0.1.3@sha256:e57a3b4d6240f55  0.0s
 => docker-image://docker.io/library/nginx:1.14@sha256:9b52c379180db988f7ff5f90ea  7.5s
 => => resolve docker.io/library/nginx:1.14@sha256:9b52c379180db988f7ff5f90ea851b  0.0s
 => => sha256:f4eba7658e18b5014950e0014eef035705bee0d89ededc66e564fd6 201B / 201B  3.0s
 => => sha256:9b52c379180db988f7ff5f90ea851bf502fdf35c6b96b3bf649 2.03kB / 2.03kB  0.0s
 => => sha256:c6ba044660fad5d45cb3ee11063f39af0dd56b775c21baff28e4bb4 948B / 948B  0.0s
 => => sha256:8ae4d16b741a05f342a364d7012848cca66872706b90ea4bfbb 6.00kB / 6.00kB  0.0s
 => => sha256:b4babd36efe54ae56731a12912fca977eb2767d797444f299 22.11MB / 22.11MB  6.6s
 => => extracting sha256:b4babd36efe54ae56731a12912fca977eb2767d797444f299ddd8666  0.6s
 => => extracting sha256:f4eba7658e18b5014950e0014eef035705bee0d89ededc66e564fd6f  0.0s
 => local://context                                                                0.0s
 => => transferring context: 2.80kB                                                0.0s
 => copy /src-0/default.conf etc/nginx/conf.d/default.conf                         0.5s
 => copy /src-0/nginx.conf etc/nginx/nginx.conf                                    0.4s
 => exporting to image                                                             0.0s
 => => exporting layers                                                            0.0s
 => => writing image sha256:f2f797226f1fa3a4b9c22d2ae640f6006f0f0db07b8e9bfe0bf26  0.0s
 => => naming to docker.io/library/test                                            0.0s

```