Slide 1

Slide 1 text

コンテナビルド最新事情 - 2022年度版- @_inductor_ 1

Slide 2

Slide 2 text

今日お話しすること ● Dockerfileの新しい記法 ○ mount=type ○ Dockerfileのヒアドキュメント ○ COPY --link の話 ● CIとビルドキャッシュの話

Slide 3

Slide 3 text

Dockerfileの新しい記法 ● Dockerがサポートするビルドの新機能は「BuildKit」と呼ばれるOSSによって実装さ れている ● BuildKitでは、より便利で賢くて高速なビルドを実現するためにいくつかの新機能を 継続的に追加(Dockerfileの書き方が変わる) ○ 公式ドキュメントの通り ○ Dockerfileの行頭に「# syntax=docker/dockerfile:1.4」を追加すると利用できる 例: RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc

Slide 4

Slide 4 text

Dockerfileの新しい記法 ● Dockerがサポートするビルドの新機能は「BuildKit」と呼ばれるOSSによって実装さ れている ● BuildKitでは、より便利で賢くて高速なビルドを実現するためにいくつかの新機能を 継続的に追加(Dockerfileの書き方が変わる) ○ 公式ドキュメントの通り ○ Dockerfileの行頭に「# syntax=docker/dockerfile:1.4」を追加すると利用できる 例: RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc ビルド中にだけ一時的に利用するが 作成されたイメージには不要な情報を ビルドツール内にキャッシュ

Slide 5

Slide 5 text

Dockerfileの新しい記法 ● Dockerがサポートするビルドの新機能は「BuildKit」と呼ばれるOSSによって実装さ れている ● BuildKitでは、より便利で賢くて高速なビルドを実現するためにいくつかの新機能を 継続的に追加(Dockerfileの書き方が変わる) ○ 公式ドキュメントの通り ○ Dockerfileの行頭に「# syntax=docker/dockerfile:1.4」を追加すると利用できる 例: RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc ビルド中にだけ一時的に利用するが 作成されたイメージには不要な情報を ビルドツール内にキャッシュ - mount typeの種類 - cache (ビルドキャッシュの保存領域) - GitHub Actions用のtype=ghaもある(便利) - secret/ssh (ビルド時に利用する秘密鍵)

Slide 6

Slide 6 text

Dockerfileの新しい記法 ● Dockerがサポートするビルドの新機能は「BuildKit」と呼ばれるOSSによって実装さ れている ● BuildKitでは、より便利で賢くて高速なビルドを実現するためにいくつかの新機能を 継続的に追加(Dockerfileの書き方が変わる) ○ 公式ドキュメントの通り ○ Dockerfileの行頭に「# syntax=docker/dockerfile:1.4」を追加すると利用できる 例: RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc ビルド中にだけ一時的に利用するが 作成されたイメージには不要な情報を ビルドツール内にキャッシュ - mount typeの種類 - cache (ビルドキャッシュの保存領域) - GitHub Actions用のtype=ghaもある(便利) - secret/ssh (ビルド時に利用する秘密鍵)

Slide 7

Slide 7 text

Dockerfileの新しい記法 ● Dockerがサポートするビルドの新機能は「BuildKit」と呼ばれるOSSによって実装さ れている ● BuildKitでは、より便利で賢くて高速なビルドを実現するためにいくつかの新機能を 継続的に追加(Dockerfileの書き方が変わる) ○ 公式ドキュメントの通り ○ Dockerfileの行頭に「# syntax=docker/dockerfile:1.4」を追加すると利用できる 例: RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt update && apt-get --no-install-recommends install -y gcc ビルド中にだけ一時的に利用するが 作成されたイメージには不要な情報を ビルドツール内にキャッシュ - mount typeの種類 - cache (ビルドキャッシュの保存領域) - GitHub Actions用のtype=ghaもある(便利) - secret/ssh (ビルド時に利用する秘密鍵) ヒアドキュメント記法も最近の アップデートで使えるようになった ビルド時にだけ必要なSSH鍵のマウント ビルドするときに $ docker build --ssh profile . でSSHの向き先を指定(CIの場合は実行開始時に秘密鍵を渡す)

Slide 8

Slide 8 text

COPYの新しいフラグ --link について ● --linkを使うには「# syntax=docker/dockerfile:1.4」が必要 ● 新しいキャッシュセマンティクス「--cache-from」を有効活用するための オプション ○ マルチステージビルドを活用する際の中間ステージをCOPYで使えるようになる ので、COPY/ADDのコストが大幅に下がる ○ これを使うと、前の行のビルドレイヤの変更有無にかかわらず、中間ステージの キャッシュが効くようになる

Slide 9

Slide 9 text

COPYの新しいフラグ --link について ● --linkを使うには「# syntax=docker/dockerfile:1.4」が必要 ● 新しいキャッシュセマンティクス「--cache-from(mount=type=cacheと組み合わせ使 うBuildKitのフラグ)」を有効活用するためのオプション ○ マルチステージビルドを活用する際の中間ステージをCOPYで使えるようになる ので、COPY/ADDのコストが大幅に下がる ○ これを使うと、前の行のビルドレイヤの変更有無にかかわらず、中間ステージの キャッシュが効くようになる これまでCIで効かせづらかった中間ステージの キャッシュが効くようになる!!! BuildKitで渡せるキャッシュのオプション

Slide 10

Slide 10 text

まとめ ● BuildKitのオプションをうまく使えば、CIでのビルドを爆速にできる ○ GitHub Actionsのインテグレーションが優秀すぎるが、CircleCIとか GitLab RunnerとかJenkinsとかでも同じ仕組みを作りこむことはできるはず ● BuildKitで新しくサポートされたDockerfile記法をちょこっと追加するだけでキャッシュが 賢くなってビルドが爆速になる ● BuildKitはいいぞ!!!!!!!!!!!!!!!! ● 参考リンク: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md