LoginSignup
122
99

More than 3 years have passed since last update.

Docker Composeでコンテナのビルドが爆速に!?最新のDocker Composeを試してみよう

Last updated at Posted at 2019-09-25

はじめに

この前至高のDockerイメージ生成を求めて -2019年版-を書いて多くの反響をいただきました。
この記事の中で「BuildKitを使うと軽量なコンテナのビルドが高速にできるようになる」と書いたのですが、実際のところ2019年現在において、Docker Composeの正式リリースではまだこちらの機能が使えません。
Docker for MacのEdgeチャンネルで2.1.5.0(40323)が降ってきて、BuildKitのComposeが使えるようになってました!!!!やったぜ!

これは、Docker ComposeではDockerのAPIと通信するのにPythonのライブラリであるdocker-pyを使っていて、こちらのメンテナンスが遅れていることが理由でした。

Docker ComposeでBuildKitは使えないのか

結論から言うと、次のリリースで使えるようになります。

コンテナビルドの鬼である@orisanoくんがこちらのPull Requestで対応してくれました。

途中レビュアーがバケーションに入ってしまったり、勝手に機能の有効化方法をCLIオプションから環境変数フラグに変えられたり、PRがクローズされてメンテナに別PRを建てられたり、環境変数の名前を勝手に変えられたり、といろいろ紆余曲折を経て、つい先月末Docker ComposeプロジェクトのUpstreamにマージされました。

使い方

COMPOSE_DOCKER_CLI_BUILD=1という環境変数をONにすることで使えます。

試しにDocker Composeを使ってイメージのビルドをやってみましょう。
もちろん、COMPOSE_DOCKER_CLI_BUILD=1 docker-compose up --buildなどのように使うこともできます!

Docker ComposeコマンドはこのリンクからDLできます。1.25.0-rc4以降のバージョンをDLし、renameしてpathを通してchmod +xしておきましょう。

$ COMPOSE_DOCKER_CLI_BUILD=1 docker-compose build
db uses an image, skipping
WARNING: Native build is an experimental feature and could change at any time
Building app
[+] Building 31.0s (14/14) FINISHED
 => [internal] load .dockerignore                                                                                                                                                                        0.0s
 => => transferring context: 73B                                                                                                                                                                         0.0s
 => [internal] load build definition from Dockerfile                                                                                                                                                     0.0s
 => => transferring dockerfile: 1.21kB                                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/golang:1.13.0-alpine3.10                                                                                                                              1.8s
 => [internal] load build context                                                                                                                                                                        0.0s
 => => transferring context: 102.11kB                                                                                                                                                                    0.0s
 => [debugger 1/9] FROM docker.io/library/golang:1.13.0-alpine3.10@sha256:84349ee862d8bafff35e0d2bfd539da565b536b4dfce654773fc21a1db2da6d7                                                              10.6s
 => => resolve docker.io/library/golang:1.13.0-alpine3.10@sha256:84349ee862d8bafff35e0d2bfd539da565b536b4dfce654773fc21a1db2da6d7                                                                        0.0s
 => => sha256:7f94eaf8af200ac18deb367dab5fb993b8ee609611a0493aa4adc287f8c682f7 301.73kB / 301.73kB                                                                                                       0.7s
 => => sha256:9fe9984849c103d07696bf941dcae6df23b652efdaedf3d804baeede686e8faf 154B / 154B                                                                                                               0.3s
 => => sha256:84349ee862d8bafff35e0d2bfd539da565b536b4dfce654773fc21a1db2da6d7 1.65kB / 1.65kB                                                                                                           0.0s
 => => sha256:c9f7377aae0ca02bfd86f3d598bde66c11646c7f5597e8c9d8ca4bde78e51df1 1.36kB / 1.36kB                                                                                                           0.0s
 => => sha256:33fbbc2ca571e774e0253ff2e42f0206e96736897b9ec438db701b645a260e9a 3.80kB / 3.80kB                                                                                                           0.0s
 => => sha256:9d48c3bd43c520dc2784e868a780e976b207cbf493eaff8c6596eb871cbd9609 2.79MB / 2.79MB                                                                                                           0.5s
 => => sha256:43c4d47973b8a428b549e22359ac3a552c3c83debaa85da4e394a3cc7917e639 126.84MB / 126.84MB                                                                                                       6.1s
 => => extracting sha256:9d48c3bd43c520dc2784e868a780e976b207cbf493eaff8c6596eb871cbd9609                                                                                                                0.2s
 => => sha256:9aaad45c37b562f6dd13a806b44c2e88c4c3d3a536cfd78c00f6336c1d5d6c40 124B / 124B                                                                                                               0.8s
 => => extracting sha256:7f94eaf8af200ac18deb367dab5fb993b8ee609611a0493aa4adc287f8c682f7                                                                                                                0.1s
 => => extracting sha256:9fe9984849c103d07696bf941dcae6df23b652efdaedf3d804baeede686e8faf                                                                                                                0.0s
 => => extracting sha256:43c4d47973b8a428b549e22359ac3a552c3c83debaa85da4e394a3cc7917e639                                                                                                                3.4s
 => => extracting sha256:9aaad45c37b562f6dd13a806b44c2e88c4c3d3a536cfd78c00f6336c1d5d6c40                                                                                                                0.0s
 => [debugger 2/9] RUN apk --no-cache --update add git                                                                                                                                          2.5s
 => [debugger 3/9] WORKDIR /realize                                                                                                                                                                      0.0s
 => [debugger 4/9] RUN go mod init vendor                                                                                                                                                                0.7s
 => [debugger 5/9] RUN go get gopkg.in/urfave/cli.v2@master     && go get github.com/oxequa/realize     && go get github.com/rakyll/gotest     && go get github.com/jwilder/dockerize                   11.5s
 => [debugger 6/9] WORKDIR /go/src/github.com/org/repo                                                                                                                                       0.1s
 => [debugger 7/9] COPY go.mod go.sum ./                                                                                                                                                                 0.2s
 => [debugger 8/9] RUN GO111MODULE=on go mod download                                                                                                                                                    2.7s
 => [debugger 9/9] COPY . .                                                                                                                                                                              0.1s
 => exporting to image                                                                                                                                                                                   0.6s
 => => exporting layers                                                                                                                                                                                  0.6s
 => => writing image sha256:5db154f284cd96c98e6bce5825082339569fd941f74f9b4b3abef0b5eb417d7d                                                                                                             0.0s
 => => naming to docker.io/library/repo_app

すごーい!できた!
レイヤをPullしてくるところなどが顕著ですが、BuildKitを使ったときの出力になっています。

というわけで、次のバージョンがいつ出るのかは全く分かりませんが、次のRC版(または正式版?)リリースに期待しています。

122
99
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
122
99