マルチプラットフォーム構築

Docker 中級

Mike Metzger

Data Engineering Consultant

マルチプラットフォームとは?

  • マルチプラットフォームとは何か
    • 異なるOS種別
      • linux
      • windows
      • macos
    • 異なるCPU種別
      • x64_64 または amd64
      • arm64
      • arm7
  • 通常は os/cpu(例: linux/amd64)と表記します

LinuxのTuxロゴ

AMD64ロゴ

ARMロゴ

Docker 中級

マルチプラットフォームの作成

  • マルチステージビルド動作が基盤です
  • 初期/ビルド段階はクロスコンパイラを使い、ホストのアーキテクチャに依存します
  • 最終段階は対象のアーキテクチャ/OSを使用します
Docker 中級

マルチプラットフォーム用のDockerfileオプション

  • ビルド段階では --platform=$BUILDPLATFORM フラグを使用
    • $BUILDPLATFORM はビルドを実行するホストのプラットフォームを表します
  • 場合によっては ARG ディレクティブを使用
    • ローカル環境変数を Docker ビルドに渡します
    • 本例では TARGETOSTARGETARCH
    • ARG TARGETOS TARGETARCH
    • ホスト側の環境変数は事前定義、または env コマンドで定義できます
Docker 中級

マルチプラットフォームの例

# Initial stage, using local platform
FROM --platform=$BUILDPLATFORM golang:1.21 AS build

# Copy source into place WORKDIR /src COPY . .
# Pull the environment variables from the host ARG TARGETOS TARGETARCH
# Compile code using the ARG variables RUN env GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /final/app .
# Create container and load the cross-compiled code FROM alpine COPY --from=build /final/app /bin
Docker 中級

マルチプラットフォームのビルド

  • マルチプラットフォームでビルドするには、docker build ではなく各種オプション付きの docker buildx を使います
  • docker buildxdocker build より多くのコマンドと機能を提供し、プラットフォーム指定も可能です

docker buildx build --platform linux/amd64,linux/arm64 -t multi-platform-app .

  • 実行前に、新しい「ビルダー」コンテナを用意する必要があります。docker buildx create --bootstrap --use を実行します。
Docker 中級

Passons à la pratique !

Docker 中級

Preparing Video For Download...