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

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

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

Kohei Ota

May 14, 2022
Tweet

More Decks by Kohei Ota

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

  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

    View Slide

  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
    ビルド中にだけ一時的に利用するが
    作成されたイメージには不要な情報を
    ビルドツール内にキャッシュ

    View Slide

  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 (ビルド時に利用する秘密鍵)

    View Slide

  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 (ビルド時に利用する秘密鍵)

    View Slide

  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の場合は実行開始時に秘密鍵を渡す)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide