ClickHouseをDockerでインストールする
以下に便利なようにDocker Hubのガイドを再現しました。利用可能なDockerイメージは、公式のClickHouse debパッケージを利用しています。
Dockerプルコマンド:
バージョン
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 clientを参照してください。
curlを使用して接続する
HTTPインターフェイスの詳細についてはClickHouse HTTP Interfaceを参照してください。
コンテナの停止/削除
ネットワーキング
事前定義されたユーザーdefaultは、パスワードが設定されていない場合、ネットワークアクセスを持っていません。
「起動時にデフォルトデータベースとユーザーを作成する方法」と「defaultユーザーの管理」を参照してください。
Dockerで実行されているClickHouseを、ホストポートを使用して特定のポートをマッピングすることによって公開できます:
または、--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の機能
ClickHouseにはいくつかの高度な機能があり、いくつかのLinux機能を有効にする必要があります。
これらはオプションであり、次のdockerコマンドライン引数を使用して有効にできます:
詳しくは、"DockerでのCAP_IPC_LOCKおよびCAP_SYS_NICE機能の設定"を参照してください。
設定
コンテナは、HTTPインターフェイス用のポート8123と、ネイティブクライアント用のポート9000を公開します。
ClickHouseの設定は、"config.xml"というファイルで表現されています(ドキュメント)。
カスタム設定でサーバーインスタンスを起動する
カスタムユーザーとしてサーバーを起動する
ローカルディレクトリをマウントしたイメージを使用する場合、適切なファイル所有権を維持するためにユーザーを指定することをお勧めします。--user引数を使用し、コンテナ内に/var/lib/clickhouseおよび/var/log/clickhouse-serverをマウントします。そうしないと、イメージは不満を言い、起動しません。
ルートからサーバーを起動する
ルートからサーバーを起動することは、ユーザー名前空間が有効な場合に便利です。 そのためには、次のように実行します:
起動時にデフォルトのデータベースとユーザーを作成する方法
時々、コンテナの起動時にユーザー(デフォルトでは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に以下を追加します: