目录
2.1 查看docker.hub 上clickhouse-server
3.1 查看docker.hub 上clickhouse-client
3.2 拉取yandex/clickhouse-client:20.3.21.2 docker镜像
4 docker 安装ClickHouse Web 界面 Tabix
4.1 查看docker.hub 上clickhouse-tabix-web-client
4.2 拉取镜像spoonest/clickhouse-tabix-web-client
4.3 创建clickhouse-tabix-web-client容器
1 系统环境
前提我已经准备好docker
1.1 linux 版本
[root@ds2 ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.8.2003 (Core)
Release: 7.8.2003
Codename: Core
1.2 docker 版本
[root@ds2 ~]# docker -v
Docker version 1.13.1, build 64e9980/1.13.1
2 docker 安装clickhouse-server
2.1 查看docker.hub 上clickhouse-server
[root@ds2 ~]# docker search clickhouse-server
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/yandex/clickhouse-server ClickHouse is an open-source column-orient... 256 [OK]
docker.io docker.io/agisoft/clickhouse-server 0
docker.io docker.io/altinity/clickhouse-server 0
docker.io docker.io/btmc/clickhouse-server yandex/clickhouse-server + clickhouse-clie... 0
docker.io docker.io/btmc/clickhouse-server_v2 0
docker.io docker.io/davideberdin/clickhouse-server 0
可见docker.io/yandex/clickhouse-server获得的点赞最多,说明用的人多,就选这个镜像了
这里不选择最新的版本latest,选择上一个稳定版本yandex/clickhouse-server:20.3.21.2
2.2 拉取 clickhouse-server镜像
[root@ds2 ~]# docker pull yandex/clickhouse-server:20.3.21.2
Trying to pull repository docker.io/yandex/clickhouse-server ...
20.3.21.2: Pulling from docker.io/yandex/clickhouse-server
171857c49d0f: Already exists
419640447d26: Already exists
61e52f862619: Already exists
89efb9c881d4: Pull complete
284b66b34b0e: Pull complete
a3b83ee38fa7: Pull complete
f7609780ee3b: Pull complete
adadfa9cf73f: Pull complete
95cb98063b9f: Pull complete
ff8a7c48b73e: Pull complete
Digest: sha256:e9c704ac6dc7f11e09b3c00d784625ac6f7c4fe9c9050c1d4b61b572f2bdd434
Status: Downloaded newer image for docker.io/yandex/clickhouse-server:20.3.21.2
查看镜像
[root@ds2 ~]# docker images docker.io/yandex/clickhouse-server:20.3.21.2
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/yandex/clickhouse-server 20.3.21.2 a653b487b34e 3 days ago 424 MB
2.3 准备配置的本地宿主机目录
[root@ds2 ~]# mkdir -p /data/module/clickhouse/data
[root@ds2 ~]# mkdir -p /data/module/clickhouse/conf
[root@ds2 ~]# mkdir -p /data/module/clickhouse/log
[root@ds2 ~]#
[root@ds2 ~]# chmod -R 777 /data/module/clickhouse/data
[root@ds2 ~]# chmod -R 777 /data/module/clickhouse/conf
[root@ds2 ~]# chmod -R 777 /data/module/clickhouse/log
data放clickhouse数据,conf放配置文件,log放日志
2.4 查看将要使用的端口
查看dockerfile文件
https://hub.docker.com/r/yandex/clickhouse-server/dockerfile
EXPOSE 表示将要对外暴露的端口9000 8123 9009
查看端口是否被占用
[root@ds2 clickhouse]# netstat -apn | grep 9000
[root@ds2 clickhouse]# netstat -apn | grep 8123
[root@ds2 clickhouse]# netstat -apn | grep 9009
[root@ds2 clickhouse]#
可见没有任何提示说明没有被占用,我可以使用
2.5 拷贝clickhouse-server配置文件
拷贝到本地宿主机用于作为模板自己来修改
① 创建临时容器
docker run --rm -d --name=liucf-clickhouse-server \
--ulimit nofile=262144:262144 \
-p 8123:8123 -p 9009:9009 -p 9000:9000 \
yandex/clickhouse-server:20.3.21.2
执行命令
[root@ds2 clickhouse]# docker run --rm -d --name=liucf-clickhouse-server \
> --ulimit nofile=262144:262144 \
> -p 8123:8123 -p 9009:9009 -p 9000:9000 \
> yandex/clickhouse-server:20.3.21.2
507189ee29eb454865deb8f5f83b754679dcc5b304cadd44b7c631d0adb23c61
[root@ds2 clickhouse]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
507189ee29eb yandex/clickhouse-server:20.3.21.2 "/entrypoint.sh" 9 seconds ago Up 8 seconds 0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp liucf-clickhouse-server
进入容器内部查看配置文件
[root@ds2 clickhouse]# docker exec -it liucf-clickhouse-server /bin/bash
root@507189ee29eb:/# ls -al /etc/clickhouse-server/
total 32
drwxr-xr-x. 1 root root 22 Nov 2 17:53 .
drwxr-xr-x. 1 root root 66 Nov 6 03:05 ..
drwxr-xr-x. 1 root root 39 Nov 2 17:53 config.d
-rw-r--r--. 1 root root 22610 Nov 2 13:20 config.xml
lrwxrwxrwx. 1 root root 41 Nov 2 17:52 preprocessed -> /var/lib/clickhouse//preprocessed_configs
drwxr-xr-x. 2 root root 6 Nov 2 17:52 users.d
-rw-r--r--. 1 root root 5190 Nov 2 13:20 users.xml
可见容器内部配置文件config.xml和users.xml在目录/etc/clickhouse-server/下面
日志目录:/var/log/clickhouse-server
数据目录:/var/lib/clickhouse
退出容器
root@507189ee29eb:/# exit
exit
[root@ds2 clickhouse]#
② 拷贝容器内配置文件到宿主机
[root@ds2 conf]# docker cp liucf-clickhouse-server:/etc/clickhouse-server/config.xml /data/module/clickhouse/conf/config.xml
[root@ds2 conf]# docker cp liucf-clickhouse-server:/etc/clickhouse-server/users.xml /data/module/clickhouse/conf/users.xml
③ 停掉临时容器liucf-clickhouse-server
[root@ds2 conf]# docker stop liucf-clickhouse-server
liucf-clickhouse-server
查看是否还在
[root@ds2 conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2cdef2452d3 docker.io/amancevice/superset "gunicorn superset..." 5 weeks ago Up 5 weeks (healthy) 0.0.0.0:8088->8088/tcp superset
[root@ds2 conf]#
可见已经被停掉了,因为启动的时候使用了参数 --rm 表示一旦容器被stop就会被删除,即使使用docker ps -a 在已经停止的容器列表中也没有它了
2.6 修改用户配置
因为我们上面已经拷贝出来了配置文件users.xml现在可以修改/data/module/clickhouse/conf/users.xml
① 修改默认用户default登录密码
使用的是SHA256加密算法
格式是:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$MY_PASSWORD"; echo -n "$MY_PASSWORD" | sha256sum | tr -d '-'
比如我为default准备设置密码123456
执行如下
[root@ds2 conf]# PASSWORD=$(base64 < /dev/urandom | head -c8); echo "123456"; echo -n "123456" | sha256sum | tr -d '-'
123456
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
会输出明码和SHA256密码 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
/data/module/clickhouse/conf/users.xml
把default账号设为只读权限,并设置密码
a 设置只读
yandex-->users-->default-->profile 节点设为 readonly
<yandex>
......
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
......
<profile>readonly</profile>
......
b 设置密码
注释掉 yandex-->users-->default-->password 节点
<yandex>
......
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
......
<!-- <password></password> -->
......
新增 yandex-->users-->default-->password_sha256_hex 节点,填入生成的密码
<yandex>
......
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default>
......
<!-- <password></password> -->
<password_sha256_hex>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</password_sha256_hex>
......
② 添加root用户并设置登录密码
生成root用户密码
[root@ds2 conf]# PASSWORD=$(base64 < /dev/urandom | head -c8); echo "888888"; echo -n "888888" | sha256sum | tr -d '-'
888888
92925488b28ab12584ac8fcaa8a27a0f497b2c62940c8f4fbc8ef19ebc87c43e
在default用户标签的同级标签下面添加root用户标签
<users>
</default>
......
</default>
<root>
<password_sha256_hex>92925488b28ab12584ac8fcaa8a27a0f497b2c62940c8f4fbc8ef19ebc87c43e</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</root>
</users>
2.7 创建容器
执行命令:
[root@ds2 log]# docker run -d --name=liucf-clickhouse-server \
> -p 8123:8123 -p 9009:9009 -p 9000:9000 \
> --ulimit nofile=262144:262144 \
> -v /data/module/clickhouse/data:/var/lib/clickhouse:rw \
> -v /data/module/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml \
> -v /data/module/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml \
> -v /data/module/clickhouse/log:/var/log/clickhouse-server:rw \
> --privileged=true \
> yandex/clickhouse-server:20.3.21.2
b64d9704419c1273ca344f1f6a98881b32bf5e98d0d52c036aa1a4ff11e8031e
查看容器创建是否成功
[root@ds2 log]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b64d9704419c yandex/clickhouse-server:20.3.21.2 "/entrypoint.sh" 3 seconds ago Up 3 seconds 0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp liucf-clickhouse-server
a2cdef2452d3 docker.io/amancevice/superset "gunicorn superset..." 5 weeks ago Up 5 weeks (healthy) 0.0.0.0:8088->8088/tcp superset
[root@ds2 log]#
docker 相关命令参数请自己百度
注意:启动的时候一定加--privileged=true 否则就会有权限问题,类似于报错如下:
[root@ds2 log]# docker logs --tail='100' liucf-clickhouse-server
chown: cannot read directory '/var/lib/clickhouse/': Permission denied
chown: cannot read directory '/var/log/clickhouse-server': Permission denied
chown: cannot read directory '/var/log/clickhouse-server': Permission denied
mkdir: cannot create directory ‘/var/lib/clickhouse/tmp/’: Permission denied
Couldn't create necessary directory: /var/lib/clickhouse/tmp/
2.8 进入容器测试clickhouse
① 进入容器
[root@ds2 log]# docker exec -it liucf-clickhouse-server /bin/bash
root@b64d9704419c:/#
② 启动容器内的clickhouse-client
注意我们已经设置了密码
root@b64d9704419c:/# clickhouse-client --password 123456
root@b64d9704419c:/# clickhouse-client --password 123456
ClickHouse client version 20.3.21.2 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.3.21 revision 54433.
b64d9704419c :)
③ 查看表
b64d9704419c :) show databases;
SHOW DATABASES
┌─name────┐
│ default │
│ system │
└─────────┘
2 rows in set. Elapsed: 0.002 sec.
b64d9704419c :) use system;
USE system
Ok.
0 rows in set. Elapsed: 0.001 sec.
b64d9704419c :) show tables;
SHOW TABLES
┌─name───────────────────────────┐
│ aggregate_function_combinators │
│ asynchronous_metrics │
│ build_options │
│ clusters │
│ collations │
│ columns │
│ contributors │
│ data_type_families │
│ databases │
│ detached_parts │
│ dictionaries │
│ disks │
│ events │
│ formats │
│ functions │
│ graphite_retentions │
│ macros │
│ merge_tree_settings │
│ merges │
│ metric_log │
│ metrics │
│ models │
│ mutations │
│ numbers │
│ numbers_mt │
│ one │
│ parts │
│ parts_columns │
│ processes │
│ quota_usage │
│ quotas │
│ replicas │
│ replication_queue │
│ row_policies │
│ settings │
│ stack_trace │
│ storage_policies │
│ table_engines │
│ table_functions │
│ tables │
│ zeros │
│ zeros_mt │
└────────────────────────────────┘
42 rows in set. Elapsed: 0.002 sec.
b64d9704419c :)
可见clickhouse-server 安装完成
3 docker 安装clickhouse-client
3.1 查看docker.hub 上clickhouse-client
[root@ds2 log]# docker search clickhouse-client
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/yandex/clickhouse-client Native client for the Clickhouse database ... 69 [OK]
docker.io docker.io/4010/clickhouse-client 0
docker.io docker.io/btmc/clickhouse-server yandex/clickhouse-server + clickhouse-clie... 0
docker.io docker.io/faunus/clickhouse-client 0
docker.io docker.io/fx19880617/clickhouse-client 0
docker.io docker.io/gdarklighter/ansible-clickhouseclient Clickhouse-client with ansible on Ubuntu 1... 0
docker.io docker.io/iskovik/clickhouse-client 0
docker.io docker.io/namcx/clickhouse-client 0
docker.io docker.io/newnius/clickhouse-client ClickHouse Client 0 [OK]
docker.io docker.io/nyaa/clickhouse-client Native client for the Clickhouse database ... 0
docker.io docker.io/robodockdev/clickhouse-client 0
docker.io docker.io/samsheff/clickhouse-client To Run: docker run -it --rm samsheff/click... 0
docker.io docker.io/slpcat/clickhouse-client 0
docker.io docker.io/sunsingerus/clickhouse-client 0
docker.io docker.io/vvklotus/clickhouse-client 0
docker.io docker.io/yjhmelody/clickhouse-client 0
[root@ds2 log]#
可见docker.io/yandex/clickhouse-client获得的点赞最多,说明用的人多,就选这个镜像了
因为clickhouse-server我选的是20.3.21.2版本的这里clickhouse-client 我也选了相同版本的
3.2 拉取yandex/clickhouse-client:20.3.21.2 docker镜像
[root@ds2 ~]# docker pull yandex/clickhouse-client:20.3.21.2
Trying to pull repository docker.io/yandex/clickhouse-client ...
20.3.21.2: Pulling from docker.io/yandex/clickhouse-client
171857c49d0f: Already exists
419640447d26: Already exists
61e52f862619: Already exists
a9384c0a7a18: Pull complete
5368d0da1703: Pull complete
Digest: sha256:b047f663bd326294bc40a76414df33586a7c1c71c926cb21e3164e11e88f0e46
Status: Downloaded newer image for docker.io/yandex/clickhouse-client:20.3.21.2
[root@ds2 log]# docker images yandex/clickhouse-client:20.3.21.2
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/yandex/clickhouse-client 20.3.21.2 7885e0410407 3 days ago 416 MB
3.3 启动clickhouse-client
[root@ds2 bin]# docker run --name liucf-clickhouse-client -it --rm --link liucf-clickhouse-server:clickhouse-server-alias docker.io/yandex/clickhouse-client:20.3.21.2 --host 192.168.12.14 --port 9000 --user root --password 888888
ClickHouse client version 20.3.21.2 (official build).
Connecting to 192.168.12.14:9000 as user root.
Connected to ClickHouse server version 20.3.21 revision 54433.
b64d9704419c :)
b64d9704419c :) show databases;
SHOW DATABASES
┌─name────┐
│ default │
│ system │
└─────────┘
2 rows in set. Elapsed: 0.002 sec.
b64d9704419c :)
可见启动成功可以使用
因为客户端每次使用完不用一直常驻所以这里使用--rm 参数 在使用exit 命令退出liucf-clickhouse-client容器后就会直接删除这个容器,下次启动重新创建就可以了
注意:这里使用了 docker --link 命令,可以让一个容器和另一个容器很方便的连接起来,其参数部分的liucf-clickhouse-server表示要连接的容器真是名称,clickhouse-server-alias是要连接的容器的别名。
3.4 配置clickhouse-client启动命令
这里把3.3 里的命令 放在一个文件中(比如文件名叫docker-clickhouse-client),chmod +x ,再放到/usr/local/bin下,就能直接使用了
[root@ds2 bin]# vim docker-clickhouse-client
docker run --name liucf-clickhouse-client -it --rm --link liucf-clickhouse-server:clickhouse-server-alias docker.io/yandex/clickhouse-client:20.3.21.2 --host 192.168.12.14 --port 9000 --user root --password 888888
[root@ds2 bin]# chmod 755 docker-clickhouse-client
使用启动命令
[root@ds2 bin]# docker-clickhouse-client
ClickHouse client version 20.3.21.2 (official build).
Connecting to 192.168.12.14:9000 as user root.
Connected to ClickHouse server version 20.3.21 revision 54433.
b64d9704419c :)
b64d9704419c :) show databases;
SHOW DATABASES
┌─name────┐
│ default │
│ system │
└─────────┘
2 rows in set. Elapsed: 0.002 sec.
b64d9704419c :)
可见每次都可以使用docker-clickhouse-client启动liucf-clickhouse-client容器进行启动clickhouse客户端
4 docker 安装ClickHouse Web 界面 Tabix
4.1 查看docker.hub 上clickhouse-tabix-web-client
这里直接在官网页面查看
我这里选着下载次数和点赞最多的spoonest/clickhouse-tabix-web-client镜像
可见latest版本也是2年前更新的说明这个镜像很久没更新了,够稳定,所以这里就使用它了,
4.2 拉取镜像spoonest/clickhouse-tabix-web-client
[root@ds2 bin]# docker pull spoonest/clickhouse-tabix-web-client:latest
查看
[root@ds2 bin]# docker images spoonest/clickhouse-tabix-web-client:latest
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/spoonest/clickhouse-tabix-web-client latest e872c1a905d9 2 years ago 245 MB
4.3 创建clickhouse-tabix-web-client容器
docker run --name liucf-clickhouse-tabix-web-client -d -p 7070:80 -e user='root' -e password='888888' spoonest/clickhouse-tabix-web-client:lates
注意:docker run -e 表示设置环境变量
执行命令:
[root@ds2 bin]# docker run --name liucf-clickhouse-tabix-web-client -d -p 7070:80 -e user='root' -e password='888888' spoonest/clickhouse-tabix-web-client:latest
e9b936a1862b7a7a1d64d200b79302432e458afcce90906fa1faa27ead9cd41c
[root@ds2 bin]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e9b936a1862b spoonest/clickhouse-tabix-web-client:latest "/bin/sh -c ./star..." 4 seconds ago Up 3 seconds 0.0.0.0:7070->80/tcp liucf-clickhouse-tabix-web-client
4.4 页面验证
登录后
可见能够使用了
注意:TABIX 查询的时候语句后面不能使用 “;” 分号否则报语法错误
Code: 62, e.displayText() = DB::Exception: Syntax error (Multi-statements are not allowed): failed at position 50 (end of query) (line 1, col 50): ;
FORMAT JSON . (version 20.3.21.2 (official build))
到此 docker 安装clickhouse-server+clickhouse-client+Tabix全部完成。