Docker Compose部署Clickhouse最新版

方式1:配置文件挂载

bash 复制代码
# 拉取最新版镜像
docker pull clickhouse:25.7.4.11-jammy

# 启动容器,从容器中复制默认配置到本地
docker run --rm -d --name tmp-ck clickhouse:25.7.4.11-jammy

# 复制文件到本地
mkdir config
docker cp tmp-ck:/etc/clickhouse-server/users.xml ./config
docker cp tmp-ck:/etc/clickhouse-server/config.xml ./config
ll config

编辑users.xml,增加一个我们自己的用户名和密码,这里我就用

XML 复制代码
    <users>
        <!-- 这里是本来的默认配置,default用户 -->

        <admin>
            <!-- 配置文件使用明文密码 -->
            <!-- <password>123456</password> -->
            <!-- 配置文件使用sha256密文密码 -->
            <password_sha256_hex>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</password_sha256_hex>
            <networks><ip>::/0</ip></networks>
            
            <!-- 下面配置和grants不能共存,用于资源控制和用户管理 -->
            <!-- 
            <profile>default</profile>
            <quota>default</quota>
            <access_management>1</access_management>
            -->

            <!-- 给该用户最高权限,后面用此用户创建其他用户 -->
            <grants>
                <query>GRANT ALL ON *.* WITH GRANT OPTION</query>
                <query>GRANT NAMED COLLECTION ADMIN ON *.*</query>
            </grants>
        </admin>
    </users>

sha256密文密码生成命令

bash 复制代码
echo -n '123456' | sha256sum | cut -d' ' -f1
# 将得到的值写入 users.xml 的 <password_sha256_hex> 节点

docker-compose.yml

bash 复制代码
services:
  clickhouse:
    image: clickhouse:25.7.4.11-jammy
    container_name: clickhouse
    ports:
      - "8123:8123"    # HTTP 接口(用于 curl/浏览器)
      - "9000:9000"    # Native TCP 接口(用于 clickhouse-client)
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/lib/clickhouse       # 数据目录
      - ./logs:/var/log/clickhouse       # 日志目录
      - ./config/config.xml:/etc/clickhouse-server/config.xml:ro  # 可选自定义配置
      - ./config/users.xml:/etc/clickhouse-server/users.xml:ro    # 可选自定义用户
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    restart: unless-stopped

启动

bash 复制代码
# 启动
docker-compose up -d

# 停止
docker-compose down -v

方式2:直接在docker-compose.yml设置用户名密码

bash 复制代码
services:
  clickhouse:
    # image: clickhouse/clickhouse-server:23.8  # clickhouse官方镜像,只有server没有client
    image: clickhouse:25.7.4.11-jammy   # docker官方镜像,server+client
    container_name: clickhouse
    ports:
      - "8123:8123"    # HTTP 接口(用于 curl/浏览器)
      - "9000:9000"    # Native TCP 接口(用于 clickhouse-client)
      - "9009:9009"    # 内部复制通信端口(可选)
    environment:
      TZ: Asia/Shanghai
      CLICKHOUSE_USER: admin
      CLICKHOUSE_PASSWORD: 123456
    volumes:
      - ./data:/var/lib/clickhouse       # 数据目录
      - ./logs:/var/log/clickhouse       # 日志目录
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    restart: unless-stopped

使用:

直接使用DataGrip或DBeaver或其他clickhouse客户端连接

bash 复制代码
# http 方式
127.0.0.1:8123

admin

123456

# TCP方式,性能更高(例如: python clickhouse-sqlalchemy)
127.0.0.1:9000

admin

123456

常用的CK用户管理SQL

sql 复制代码
-- 创建数据库
create database test;
-- 创建用户: root,密码: 123456
CREATE USER root IDENTIFIED WITH sha256_password BY '123456';
-- 给root用户授予test库所有表权限
GRANT ALL ON test.* TO root WITH GRANT OPTION;
-- 查看用户权限
SHOW GRANTS FOR root;
-- 撤销用户权限,撤销某个库的权限和撤销所有库的权限
REVOKE ALL ON test.* FROM root;
REVOKE ALL ON *.* FROM root;
-- 给root用户授予所有库所有表权限
GRANT ALL ON *.* TO root WITH GRANT OPTION;
-- 给root用户授予g_开头的所有数据库的权限
GRANT ALL ON g_*.* TO root;
-- 删除用户
DROP USER root;