docker部署clickhouse24.8
好的,我们坚持 方式一(纯 cron 配置文件),这样最简洁可靠。下面我给你一个改进后的完整方案,包含注释,保证你能一眼看懂每个部分的作用。
version: '3.8'
services:
clickhouse:
image: clickhouse/clickhouse-server:24.8-alpine # 使用轻量版 ClickHouse 镜像
container_name: clickhouse-server248_crm # 容器名称
restart: unless-stopped # 异常退出后自动重启
ports:
- "18125:8123" # HTTP 接口映射到宿主机 18125
- "19002:9000" # TCP 接口映射到宿主机 19002
environment:
- TZ=Asia/Seoul # 设置时区
- CLICKHOUSE_USER=default # 默认用户
- CLICKHOUSE_PASSWORD=123456 # 默认用户密码(生产环境请改为强密码)
- CLICKHOUSE_DB=test # 启动时自动创建 test 数据库
volumes:
- ./app_clickhouse/data:/var/lib/clickhouse # 数据持久化目录
- ./app_clickhouse/logs:/var/log/clickhouse-server # 日志持久化目录
- ./config.xml:/etc/clickhouse-server/config.xml # 挂载自定义配置文件
- ./users.xml:/etc/clickhouse-server/users.xml # 挂载用户配置文件(更安全)
cap_add:
- SYS_NICE # 提升性能相关的系统能力
- NET_ADMIN # 网络管理能力(如需要)
- IPC_LOCK # 内存锁定能力,避免交换
ulimits:
nofile:
soft: 262144 # 打开文件数限制(软)
hard: 262144 # 打开文件数限制(硬)
clickhouse-backup:
image: alexakulov/clickhouse-backup:latest # 社区备份工具镜像
container_name: clickhouse-backup
restart: unless-stopped
environment:
- CLICKHOUSE_HOST=clickhouse # 通过服务名访问 ClickHouse
- CLICKHOUSE_PORT=9000
- CLICKHOUSE_USER=default
- CLICKHOUSE_PASSWORD=123456
- STORAGE=local # 使用本地存储,不依赖 S3
- BACKUPS_TO_KEEP_LOCAL=7 # 保留最近 7 个备份
volumes:
- ./app_clickhouse/data:/var/lib/clickhouse # 访问数据目录
- ./backup:/backup # 本地备份目录
- ./cronjobs:/etc/cron.d # 定时任务配置目录
depends_on:
- clickhouse # 确保 ClickHouse 先启动
---
📄 docker-compose.yml(带详细注释)
📂 cronjobs/backup(定时任务配置文件)
# 每天凌晨2点创建本地备份
0 2 * * * root clickhouse-backup create
# 每周日凌晨3点清理过期备份(保留最近7天)
0 3 * * 0 root clickhouse-backup delete local --older-than=7d🔑 改进点总结
• 纯配置文件方式:你只需要创建 cronjobs/backup 文件,里面写定时规则,不需要额外脚本。
• 容器内自动执行:clickhouse-backup 容器挂载到 /etc/cron.d,cron 会自动读取并执行。
• 持久化保证:数据和备份都挂载到宿主机目录,容器重启不会丢失。
• 安全性:通过 users.xml 配置密码和访问控制,避免默认无密码。
• 自动化:每天备份,每周清理,形成稳定循环。
---
👉 这样,你的部署就能做到:容器重启不丢数据,备份自动执行,过期备份自动清理。
要不要我再帮你写一个 恢复流程清单(从本地备份恢复到 ClickHouse),让你在灾难恢复时能一步步照着操作?
老版本
docker run -d \
-p 18125:8123 \
-p 19002:9000 \
-v ./app_clickhouse/data:/var/lib/clickhouse \
-v ./app_clickhouse/logs:/var/log/clickhouse-server \
-e TZ=Asia/Seoul \
-e CLICKHOUSE_USER=default \
-e CLICKHOUSE_PASSWORD=123456 \
-e CLICKHOUSE_DB=test \
--name clickhouse-server248_crm \
--cap-add=SYS_NICE \
--cap-add=NET_ADMIN \
--cap-add=IPC_LOCK \
--ulimit nofile=262144:262144 \
clickhouse/clickhouse-server:24.8-alpine
License:
CC BY 4.0