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アクセスが含まれています。これには、mysqlclient
、psycopg2-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/arm64
とlinux/amd64
の両方をサポートしています。これにより、helm
やdocker compose
などの上位レベルの構造がこれらのイメージを参照し、効果的にマルチプラットフォームになることが可能になります。
プルリクエストとマスタービルドはプラットフォームごとに1つのイメージであるため、並列化できます。また、これらのビルドのマトリックスは、すべてのプラットフォームですべてのビルドプリセットを構築する必要がないため、よりまばらになり、一般的に選択性を高めることができます。これらのビルドでは、該当する場合、タグに-arm
を付加します。
Appleシリコンでの作業
Appleの現世代のコンピュータはARMベースのCPUを使用しており、MACで実行されているDockerでは、linux/arm64/v8
が必要なようです(少なくとも1人のユーザーのM2はそのように構成されていました)。環境変数DOCKER_DEFAULT_PLATFORM
をlinux/amd64
に設定すると、ここで提供されているSupersetビルドを活用および構築するという点で機能するようです。
export DOCKER_DEFAULT_PLATFORM=linux/amd64
おそらく、linux/arm64/v8
は、この世代のチップに最適化されていると考えられますが、ARMエコシステム全体での互換性は低くなります。