跳到主要内容
跳到主要内容

使用 Docker 安装 ClickHouse

为了方便,以下是 Docker Hub 上的指南。可用的 Docker 镜像使用官方的 ClickHouse deb 包。

Docker 拉取命令:

版本

  • latest 标签指向最新稳定分支的最新发布版本。
  • 22.2 的分支标签指向相应分支的最新发布版本。
  • 完整版本标签如 22.2.322.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,包含 patch。作为变通方法,您可以使用 docker run --security-opt seccomp=unconfined,但这有安全隐患。

如何使用此镜像

启动服务器实例

默认情况下,ClickHouse 只能通过 Docker 网络访问。请参阅下面的网络部分。

默认情况下,启动的上述服务器实例将作为 default 用户运行,无需密码。

从本地客户端连接

有关 ClickHouse 客户端的更多信息,请参阅 ClickHouse 客户端

使用 curl 连接

有关 HTTP 接口的更多信息,请参阅 ClickHouse HTTP 接口

停止/移除容器

网络

备注

预定义用户 default 除非设置了密码,否则没有网络访问权限,请参阅“如何在启动时创建默认数据库和用户”和下面的“管理 default 用户”

您可以通过 映射特定端口 将容器内部的 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 功能”

配置

容器通过端口 8123 提供 HTTP 接口,通过端口 9000 提供 本地客户端

ClickHouse 配置以文件 "config.xml" 表示(文档)。

使用自定义配置启动服务器实例

以自定义用户启动服务器

当您使用挂载本地目录的镜像时,您可能希望指定用户以维护正确的文件所有权。使用 --user 参数并挂载 /var/lib/clickhouse/var/log/clickhouse-server 到容器内。否则,镜像将会提示错误并不会启动。

以 root 用户启动服务器

以 root 用户启动服务器在启用用户命名空间的情况下非常有用。 为此运行:

如何在启动时创建默认数据库和用户

有时,您可能希望在容器启动时创建一个用户(默认使用名为 default 的用户)和数据库。您可以使用环境变量 CLICKHOUSE_DBCLICKHOUSE_USERCLICKHOUSE_DEFAULT_ACCESS_MANAGEMENTCLICKHOUSE_PASSWORD 来实现:

管理 default 用户

如果未设置 CLICKHOUSE_USERCLICKHOUSE_PASSWORDCLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT,则默认情况下用户 default 被禁用网络访问。

有一种方法可以通过将环境变量 CLICKHOUSE_SKIP_USER_SETUP 设置为 1 来不安全地使 default 用户可用:

如何扩展此镜像

要在基于此镜像的镜像中执行其他初始化,请在 /docker-entrypoint-initdb.d 下添加一个或多个 *.sql*.sql.gz*.sh 脚本。在入口点调用 initdb 后,它将运行任何 *.sql 文件,运行任何可执行的 *.sh 脚本,并源任何在该目录中找到的非可执行 *.sh 脚本,以便在启动服务之前进行进一步初始化。
此外,您可以提供环境变量 CLICKHOUSE_USERCLICKHOUSE_PASSWORD,这些将用于初始化过程中点击点击客户端。

例如,要添加另一个用户和数据库,请将以下内容添加到 /docker-entrypoint-initdb.d/init-db.sh