本記事は、2022年5月に開催されたTechFeed Conference 2022のセッション書き起こし記事
それではこれから、私@_inductor_が
今日は主に4つの話をしていきます。ちょっと駆け足になってしまいますが、コンテナビルド高速化に向けた4つの機能およびポイントについてお話しします。

Dockerfileの新しい記法
まず最初に、Dockerfileに新しい記法がいくつか増えています。それを実装しているのは BuildKitと呼ばれるDocker発のオープンソースのソフトウェアがベースになっていて、Dockerfileの中で
# syntax=docker/dockerfile:1.4
という記述を最初に追加してあげると利用できるようになっています。

たとえば今、ここのスライドの例の中に

このマウントタイプにはいくつか種類があるのですが、今回は3つご紹介します。
1つ目が

2つ目がGitHub Actionsで使える

最後にご紹介するのが、

ここまで3つのマウントタイプについてご紹介してきました。ちなみにここに書いてあるRUN命令の中で、複数行書くためのヒアドキュメントも最近のアップデートで使えるようになっています。
COPYの新しいフラグ「--link」
続いて、COPYの新しいフラグについてご紹介します。
COPY命令を使うと、アプリケーションのコードをコンテナのビルドコンテキストに含めることができるんですけど、これを使うと新しいキャッシュセマンティクスである

これまでマルチステージビルドの中では、COPYの前のビルドコンテキストが変わってしまうとCOPYもやり直しになっていたのですが、--linkを使うとその辺が全部キャッシュが効くようになるので、ビルドが速くなります。
こんな感じですね。

cache-fromのところで指定した上でDockerfile に–linkを追加するだけなので、非常に簡単にビルドを高速化することができます。CIなどではとくに顕著で、これまでCIでなかなか中間ステージのキャッシュを効かせられなくて悩んでいた人もいると思うんですけど、これを追加してあげることによってCIが本当に1秒とかで終わるようになって最高です。
まとめ
というわけで、複数のDockerfileの新しい記法についてご紹介してきましたが、このBuildKitのオプションをうまく使ってあげることで、CIのビルドが爆速にできるようになります。

今回はGitHub Actionsとのインテグレーションが非常に便利なので、それをベースにご紹介しましたが、同じ仕組みをCircleCIあるいはGitLab、あるいはJenkinsでも似たような書き方をすることができます。なので
参考リンク、それから今回ご紹介したスライドのリンクは後でTwitterなどに張っておこうと思います。
というわけで私からの発表は以上になります。ご清聴ありがとうございました。