メインコンテンツへスキップ
GitHubでこのページを編集

Dockerビルド、イメージ、タグ

Apache Supersetコミュニティでは、Supersetの開発、リリース、本番環境での運用にDockerを広く使用しています。このページでは、Dockerビルドとタグの命名規則について詳しく説明し、ユーザーが提供物を理解するのに役立てます。

イメージはGitHub Actionsを使用して構築され、Superset Docker Hubリポジトリにプッシュされます。異なるイメージセットが異なるタイミングで構築および/または公開されます。

  • 公開リリース (release): 3.0.0のようなタグとlatestタグを使用して公開されます。
  • プルリクエストのイテレーション (pull_request): 各プルリクエストに対して、ビルドを検証するためにDockerをアクティブに構築しますが、セキュリティ上の理由からこれらのイメージは公開しません。単にdocker build --loadします。
  • mainブランチへのマージ (push): 新しいSHAが生成され、最新のmasterバージョンに対してmasterで始まるタグが付けられます。

ビルドプリセット

ビルドのパラメータの組み合わせを表す「プリセット」がいくつかあります。これらは主に、ビルドのターゲットレイヤーやベースイメージを指します。

以下は、build_docker.pyスクリプトを通じて公開されているビルドプリセットです。

  • lean: フロントエンドとバックエンドの両方を含むデフォルトのDockerイメージです。build_presetのないタグはleanビルドです (例: latest, 4.0.0, 3.0.0, ...)。 leanビルドにはデータベースドライバが含まれていません。つまり、自分でインストールする必要があります。これは、分析データベースとメタデータデータベースに適用されます。インストール用に選択したメタデータデータベースに応じて、mysqlclientまたはpsycopg2-binaryのどちらか、および分析データベースへの接続に必要なドライバをレイヤー化する必要があります。
  • dev: 開発用で、ヘッドレスブラウザ、開発関連のユーティリティ、およびrootアクセスが含まれています。これには、mysqlclientpsycopg2-binary、および開発/CIで使用されるその他のいくつかの一般的なデータベースドライバが含まれています。
  • py311 (例: Py311): leanに似ていますが、Pythonのバージョンが異なります (この例では3.11)。
  • ci: 特定のCIワークロード用です。
  • websocket: 高度な機能をサポートするSupersetクラスター用です。
  • dockerize: Helmによって使用されます。

主要なタグの例

  • latest: 最新の公式リリースビルド
  • latest-dev: 最新の公式リリースビルドの-devイメージで、ヘッドレスブラウザとrootアクセスが含まれています。
  • master: masterブランチからの最新のビルドで、暗黙的にleanビルドプリセットです。
  • master-dev: masterに似ていますが、ヘッドレスブラウザとrootアクセスが含まれています。
  • pr-5252: PR 5252の最新のコミットです。
  • 30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev: この特定のSHAのビルドで、masterマージまたはリリースから取得できます。
  • websocket-latest: Supersetクラスターで使用するWebSocketイメージです。

ビルドマトリックスとタグ付け規則に関する洞察や変更については、build_docker.pyスクリプトとdocker.yml GitHubアクションを確認してください。

Dockerfileの主要なARG

  • BUILD_TRANSLATIONS: イメージに翻訳を組み込むかどうか。フロントエンドビルドでは、これはwebpackに対して、moment-timezoneライブラリからen以外のすべてのロケールを削除するように指示します。バックエンドでは、*.po翻訳ファイルのコンパイルをスキップします。
  • DEV_MODE: フロントエンドビルドをスキップするかどうか。これは、ローカルボリュームをマウントし、--watchモードでwebpackを使用してビルドするdocker-compose開発セットアップで使用されます。つまり、ローカルファイルシステムのコードを変更すると、この目的で使用されるDockerイメージ内のwebpackが、コードの変更に応じてフロントエンドを継続的に再構築します。このARGにより、最初のdocker-composeビルドに必要な時間とリソースを大幅に削減できます。
  • INCLUDE_CHROMIUM: バックエンドビルドにchromiumを含めるかどうか。これにより、「アラートとレポート」およびサムネイル生成に関連するワークロードのヘッドレスブラウザとして使用できます。
  • INCLUDE_FIREFOX: 上記と同じですが、firefox用です。
  • PY_VER: Pythonバックエンドのベースイメージを指定します。前方または後方互換性に取り組んでいない場合は、この設定を変更しないことをお勧めします。

キャッシング

ビルドを高速化するために、Dockerのベストプラクティスに従い、apache/superset-cacheを使用します。

データベースドライバについて

Dockerイメージには、環境ごとに異なるドライバが必要なため、データベースドライバのサポートがほとんどありません。幅広いデータベースサポートを備えたビルドを維持することは、困難(数十のデータベース、Pythonドライバ、およびOS依存関係)で非効率的(ビルド時間が長くなり、イメージが大きくなり、レイヤーキャッシュのヒット率が低下する)です。

本番環境で使用する場合は、leanイメージを派生させ、必要なデータベースのサポートを追加することをお勧めします。

異なるプラットフォーム(特にarm64およびamd64)のサポートについて

現在、すべての自動ビルドはマルチプラットフォームであり、linux/arm64linux/amd64の両方をサポートしています。これにより、helmdocker composeなどの上位レベルの構造がこれらのイメージを参照し、効果的にマルチプラットフォームになることが可能になります。

プルリクエストとマスタービルドはプラットフォームごとに1つのイメージであるため、並列化できます。また、これらのビルドのマトリックスは、すべてのプラットフォームですべてのビルドプリセットを構築する必要がないため、よりまばらになり、一般的に選択性を高めることができます。これらのビルドでは、該当する場合、タグに-armを付加します。

Appleシリコンでの作業

Appleの現世代のコンピュータはARMベースのCPUを使用しており、MACで実行されているDockerでは、linux/arm64/v8が必要なようです(少なくとも1人のユーザーのM2はそのように構成されていました)。環境変数DOCKER_DEFAULT_PLATFORMlinux/amd64に設定すると、ここで提供されているSupersetビルドを活用および構築するという点で機能するようです。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

おそらく、linux/arm64/v8は、この世代のチップに最適化されていると考えられますが、ARMエコシステム全体での互換性は低くなります。