Docker を使用して ClickHouse をインストールする
Docker Hub のガイドを、 参考のために以下に再掲します。提供されている Docker イメージは、 ClickHouse 用の公式 deb パッケージを利用しています。
Docker pull コマンド:
バージョン
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を使用し始めました。これは パッチ を含む docker バージョン >=20.10.10を必要とします。回避策として、代わりにdocker run --security-opt seccomp=unconfinedを使用できますが、セキュリティ上の影響があります。
このイメージの使い方
サーバーインスタンスの起動
デフォルトでは、ClickHouse には Docker ネットワーク経由でのみアクセスできます。ネットワーク設定については、以下のセクションを参照してください。
デフォルトでは、上記のサーバーインスタンスは、パスワードなしの default ユーザーとして実行されます。
ネイティブクライアントを使って接続する
ClickHouse クライアントの詳細については、ClickHouse クライアント を参照してください。
curl で接続する
HTTP インターフェースの詳細については、ClickHouse HTTP Interface を参照してください。
コンテナの停止および削除
ネットワーキング
事前定義されたユーザー default は、パスワードが設定されていない限りネットワークにアクセスできません。
下記の「起動時に default データベースとユーザーを作成する方法」と「default ユーザーの管理」を参照してください。
Docker コンテナで稼働している ClickHouse を公開するには、コンテナ内部のポートをホスト側のポートに特定のポートをマッピングします。
または、--network=host を使用してコンテナにホストポートを直接利用させることで
(ネットワークパフォーマンスをさらに向上させることもできます):
上記の例で設定しているデフォルトユーザーは、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 ケーパビリティ
ClickHouse には高度な機能がいくつかあり、その一部を利用するには複数の Linux ケーパビリティ を有効化する必要があります。
これらは必須ではありませんが、次の Docker のコマンドライン引数 を使用して有効化できます。
詳細については "Docker での CAP_IPC_LOCK と CAP_SYS_NICE ケーパビリティの設定" を参照してください。
設定
コンテナは、HTTP インターフェイス 用にポート 8123 を、ネイティブクライアント 用にポート 9000 を公開します。
ClickHouse の設定は「config.xml」ファイルによって定義されます(ドキュメント)。
カスタム構成でサーバーインスタンスを起動する
カスタムユーザーでサーバーを起動する
ローカルディレクトリをマウントしてイメージを使用する場合、適切なファイル所有権を維持するためにユーザーを指定しておくことをお勧めします。--user 引数を使用し、コンテナ内に /var/lib/clickhouse と /var/log/clickhouse-server をマウントしてください。これを行わないと、イメージがエラーとなり起動しません。
ルートからサーバーを起動する
ユーザーネームスペースが有効になっている場合、root ユーザーとしてサーバーを起動するのが便利です。 そのためには、次を実行します:
起動時に default データベースとユーザーを作成する方法
コンテナの起動時に、ユーザー(既定では 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 配下のスクリプトは、ファイル名の アルファベット順 に実行されます。スクリプト同士に依存関係がある場合(たとえば、VIEW を作成するスクリプトは、参照されるテーブルを作成するスクリプトの後に実行する必要があるなど)、ファイル名が正しい順序でソートされるようにしてください。
また、初期化中に clickhouse-client で使用される環境変数 CLICKHOUSE_USER と CLICKHOUSE_PASSWORD を指定することもできます。
たとえば、別のユーザーとデータベースを追加するには、次の内容を /docker-entrypoint-initdb.d/init-db.sh に追加します。