使用 Docker 安装 ClickHouse
为方便起见,下面转载了 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 客户端。
使用 curl 进行连接
有关 HTTP 接口的更多信息,请参阅 ClickHouse HTTP 接口。
停止/移除容器
网络
预定义用户 default 在未设置密码之前不具备网络访问权限,
请参阅下文的「How to create default database and user on starting」和「Managing default user」
你可以通过在 Docker 中映射特定端口, 将容器内的端口绑定到宿主机的端口,从而对外暴露在 Docker 中运行的 ClickHouse:
或者通过 --network=host 允许容器直接使用主机端口(这也有助于提升网络性能):
上面示例中的用户默认配置仅适用于本机(localhost)请求
卷(Volumes)
通常,为了实现持久化,你可能需要在容器内挂载以下目录:
/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 能力(capabilities)。
这些能力是可选的,可以通过以下 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_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 目录下添加一个或多个 *.sql、*.sql.gz 或 *.sh 脚本。入口点脚本调用 initdb 之后,会运行所有 *.sql 文件、执行所有可执行的 *.sh 脚本,并对该目录中所有不可执行的 *.sh 脚本执行 source 引入操作,以在启动服务前完成进一步初始化。
另外,你也可以提供环境变量 CLICKHOUSE_USER 和 CLICKHOUSE_PASSWORD,它们会在初始化期间被 clickhouse-client 使用。
例如,要添加另一个用户和数据库,请在 /docker-entrypoint-initdb.d/init-db.sh 中加入以下内容: