Docker を使用して ClickHouse をインストールする
バージョン
latestタグは、最新の安定版ブランチの最新リリースを指します。22.2のようなブランチタグは、対応するブランチの最新リリースを指します。22.2.3や22.2.3.5のようなフルバージョンタグは、対応するリリースを指します。headタグは、デフォルトブランチの最新コミットからビルドされます。- 各タグには、
alpineベースでビルドされていることを示す省略可能な-alpine接尾辞があります。
互換性
- amd64 イメージでは、SSE3 命令のサポートが必要です。 2005 年以降の x86 CPU のほぼすべてが SSE3 をサポートしています。
- arm64 イメージでは、ARMv8.2-A アーキテクチャのサポートに加えて、 Load-Acquire RCpc レジスタも必要です。このレジスタは ARMv8.2-A ではオプションですが、 ARMv8.3-A では必須です。Graviton >=2、Azure、および GCP のインスタンスではサポートされています。 サポート対象外のデバイスの例としては、Raspberry Pi 4 (ARMv8.0-A) や Jetson AGX Xavier/Orin (ARMv8.2-A) があります。
- ClickHouse 24.11 以降、Ubuntu イメージはベースイメージとして
ubuntu:22.04を使用するようになりました。これには、patch を含む docker バージョン >=20.10.10が必要です。回避策として、 代わりにdocker run --security-opt seccomp=unconfinedを使用することもできますが、セキュリティ上の影響がある点に注意してください。
このイメージの使い方
サーバーインスタンスを起動する
default ユーザーとして実行されます。
ネイティブクライアントで接続する
curl で接続する
コンテナーの停止と削除
ネットワーク
あらかじめ定義されているユーザー
default は、パスワードを設定しない限りネットワークアクセスできません。
詳しくは、以下の “起動時にデフォルトのデータベースとユーザーを作成する方法” および “default ユーザーの管理” を参照してください--network=host を使ってコンテナーがホストのポートを直接利用することもできます
(ネットワークパフォーマンスの向上にもつながります) :
上記の例の default ユーザーは、localhost からのリクエストでのみ使用できます
ボリューム
/var/lib/clickhouse/- ClickHouse がデータを保存するメインのフォルダー/var/log/clickhouse-server/- ログ
/etc/clickhouse-server/config.d/*.xml- サーバー設定の調整用ファイル/etc/clickhouse-server/users.d/*.xml- ユーザー設定の調整用ファイル/docker-entrypoint-initdb.d/- データベース初期化スクリプトが格納されたフォルダー (下記を参照) 。
Linux capabilities
設定
カスタム設定でサーバーインスタンスを起動する
カスタムユーザーでサーバーを起動する
--user 引数を使用し、/var/lib/clickhouse と /var/log/clickhouse-server をコンテナー内にマウントしてください。そうしないと、イメージがエラーを出して起動しません。
root からサーバーを起動する
起動時にデフォルトのデータベースとユーザーを作成する方法
default という名前のユーザーが使用されます) やデータベースを作成したい場合があります。これは、環境変数 CLICKHOUSE_DB、CLICKHOUSE_USER、CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT、CLICKHOUSE_PASSWORD を使って行えます。
default ユーザーの管理
CLICKHOUSE_USER、CLICKHOUSE_PASSWORD、CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT のいずれも設定されていない場合、ユーザー default は既定でネットワークアクセスが無効になります。
環境変数 CLICKHOUSE_SKIP_USER_SETUP を 1 に設定すると、default ユーザーを安全ではない状態で利用できるようにできます。
このイメージを拡張する方法
/docker-entrypoint-initdb.d 配下に 1 つ以上の *.sql、*.sql.gz、または *.sh スクリプトを追加します。entrypoint が initdb を呼び出した後、サービスの起動前に追加の初期化を行うため、このディレクトリ内で見つかった *.sql ファイルを実行し、実行可能な *.sh スクリプトを実行し、実行可能でない *.sh スクリプトを source します。
/docker-entrypoint-initdb.d 配下のスクリプトは、ファイル名のアルファベット順で実行されます。スクリプト同士に依存関係がある場合 (たとえば、ビューを作成するスクリプトは、その参照先テーブルを作成するスクリプトの後に実行する必要がある場合) 、ファイル名が正しい順序でソートされるようにしてください。CLICKHOUSE_USER と CLICKHOUSE_PASSWORD を指定することもできます。
たとえば、別のユーザーとデータベースを追加するには、次の内容を /docker-entrypoint-initdb.d/init-db.sh に追加します。