Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナビルド最新事情 2022年度版 / Container Build 2022

コンテナビルド最新事情 2022年度版 / Container Build 2022

Ad22fcf5773b906c08330f4d57242212?s=128

Kohei Ota

May 14, 2022
Tweet

More Decks by Kohei Ota

Other Decks in Technology

Transcript

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

  2. 今日お話しすること • Dockerfileの新しい記法 ◦ mount=type ◦ Dockerfileのヒアドキュメント ◦ COPY --link

    の話 • CIとビルドキャッシュの話
  3. 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
  4. 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 ビルド中にだけ一時的に利用するが 作成されたイメージには不要な情報を ビルドツール内にキャッシュ
  5. 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 (ビルド時に利用する秘密鍵)
  6. 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 (ビルド時に利用する秘密鍵)
  7. 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の場合は実行開始時に秘密鍵を渡す)
  8. COPYの新しいフラグ --link について • --linkを使うには「# syntax=docker/dockerfile:1.4」が必要 • 新しいキャッシュセマンティクス「--cache-from」を有効活用するための オプション ◦

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

    マルチステージビルドを活用する際の中間ステージをCOPYで使えるようになる ので、COPY/ADDのコストが大幅に下がる ◦ これを使うと、前の行のビルドレイヤの変更有無にかかわらず、中間ステージの キャッシュが効くようになる これまでCIで効かせづらかった中間ステージの キャッシュが効くようになる!!! BuildKitで渡せるキャッシュのオプション
  10. まとめ • BuildKitのオプションをうまく使えば、CIでのビルドを爆速にできる ◦ GitHub Actionsのインテグレーションが優秀すぎるが、CircleCIとか GitLab RunnerとかJenkinsとかでも同じ仕組みを作りこむことはできるはず • BuildKitで新しくサポートされたDockerfile記法をちょこっと追加するだけでキャッシュが

    賢くなってビルドが爆速になる • BuildKitはいいぞ!!!!!!!!!!!!!!!! • 参考リンク: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md