ClickHouseをDockerでインストールする
便利のために、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インターフェイスを参照してください。
コンテナの停止 / 削除
ネットワーキング
あらかじめ定義されたユーザーdefault
は、パスワードが設定されていない限りネットワークアクセスを持ちません。
以下の「デフォルトデータベースとユーザーの作成方法」および「default
ユーザーの管理」を参照してください。
Dockerで実行しているClickHouseを公開するには、ホストポートを使用してコンテナ内部の特定のポートをマッピングします。
または、コンテナがホストポートを直接使用することを許可し、--network=host
を使用します(これによりネットワークパフォーマンスが向上します):
上記の例のデフォルトユーザーは、ローカルホストのリクエストのみに使用可能です。
ボリューム
通常、永続性を達成するために、以下のフォルダーをコンテナ内にマウントすることをお勧めします:
/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
という名前のユーザー)がデータベースを作成したい場合があります。環境変数CLICKHOUSE_DB
、CLICKHOUSE_USER
、CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT
、およびCLICKHOUSE_PASSWORD
を使用して行うことができます:
default
ユーザーの管理
ユーザーdefault
は、CLICKHOUSE_USER
、CLICKHOUSE_PASSWORD
、またはCLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT
が設定されていない場合、デフォルトでネットワークアクセスが無効になっています。
環境変数CLICKHOUSE_SKIP_USER_SETUP
を1に設定することで、default
ユーザーを安全でなく利用可能にする方法もあります:
このイメージを拡張する方法
このイメージから派生したイメージで追加の初期化を行うには、/docker-entrypoint-initdb.d
の下に1つ以上の*.sql
、*.sql.gz
、または*.sh
スクリプトを追加します。エントリポイントがinitdb
を呼び出すと、そのディレクトリにある*.sql
ファイルが実行され、実行可能な*.sh
スクリプトが実行され、非実行可能な*.sh
スクリプトがソースされて、サービスが開始される前に更なる初期化が行われます。
また、初期化中にclickhouse-clientに使用される環境変数CLICKHOUSE_USER
とCLICKHOUSE_PASSWORD
を提供できます。
例えば、別のユーザーとデータベースを追加するには、/docker-entrypoint-initdb.d/init-db.sh
に以下を追加します: