本記事は、2022年5月に開催されたTechFeed Conference 2022のセッション書き起こし記事
それではこれから、私@_inductor_が
今日は主に4つの話をしていきます。ちょっと駆け足になってしまいますが、コンテナビルド高速化に向けた4つの機能およびポイントについてお話しします。
![今回お話すること](/assets/images/article/2022/09/tf011-c_build/001.png)
Dockerfileの新しい記法
まず最初に、Dockerfileに新しい記法がいくつか増えています。それを実装しているのは BuildKitと呼ばれるDocker発のオープンソースのソフトウェアがベースになっていて、Dockerfileの中で
# syntax=docker/dockerfile:1.4
という記述を最初に追加してあげると利用できるようになっています。
![Dockerfileの新しい記法](/assets/images/article/2022/09/tf011-c_build/002.png)
たとえば今、ここのスライドの例の中に
![RUN -mountを使うと一時的に保存したいメタデータなどをビルドツール内にキャッシュできる](/assets/images/article/2022/09/tf011-c_build/003.png)
このマウントタイプにはいくつか種類があるのですが、今回は3つご紹介します。
1つ目が
![ビルドキャッシュの保存領域「cache」](/assets/images/article/2022/09/tf011-c_build/004.png)
2つ目がGitHub Actionsで使える
![GitHub Actions用のtype=gha](/assets/images/article/2022/09/tf011-c_build/005.png)
最後にご紹介するのが、
![プライベートなリポジトリをpullするときに使えるsecret/ssh](/assets/images/article/2022/09/tf011-c_build/006.png)
ここまで3つのマウントタイプについてご紹介してきました。ちなみにここに書いてあるRUN命令の中で、複数行書くためのヒアドキュメントも最近のアップデートで使えるようになっています。
COPYの新しいフラグ「--link」
続いて、COPYの新しいフラグについてご紹介します。
COPY命令を使うと、アプリケーションのコードをコンテナのビルドコンテキストに含めることができるんですけど、これを使うと新しいキャッシュセマンティクスである
![COPYの新しいフラグ「--link」](/assets/images/article/2022/09/tf011-c_build/007.png)
これまでマルチステージビルドの中では、COPYの前のビルドコンテキストが変わってしまうとCOPYもやり直しになっていたのですが、--linkを使うとその辺が全部キャッシュが効くようになるので、ビルドが速くなります。
こんな感じですね。
![--linkを使うとこれまで効かせづらかったキャッシュが効くようになるのでビルドが高速化する](/assets/images/article/2022/09/tf011-c_build/008.png)
cache-fromのところで指定した上でDockerfile に–linkを追加するだけなので、非常に簡単にビルドを高速化することができます。CIなどではとくに顕著で、これまでCIでなかなか中間ステージのキャッシュを効かせられなくて悩んでいた人もいると思うんですけど、これを追加してあげることによってCIが本当に1秒とかで終わるようになって最高です。
まとめ
というわけで、複数のDockerfileの新しい記法についてご紹介してきましたが、このBuildKitのオプションをうまく使ってあげることで、CIのビルドが爆速にできるようになります。
![今回のまとめ - BuildKitはいいぞ!!!](/assets/images/article/2022/09/tf011-c_build/009.png)
今回はGitHub Actionsとのインテグレーションが非常に便利なので、それをベースにご紹介しましたが、同じ仕組みをCircleCIあるいはGitLab、あるいはJenkinsでも似たような書き方をすることができます。なので
参考リンク、それから今回ご紹介したスライドのリンクは後でTwitterなどに張っておこうと思います。
というわけで私からの発表は以上になります。ご清聴ありがとうございました。