# docker部署clickhouse
# 安裝clickhouse-server
## 創建目錄
```shell
#宿主機創建目錄,用于存放配置文件、數據、日志(我是放在/data/docker/clickhouse下)
sudo mkdir -p /data/docker/clickhouse/conf /data/docker/clickhouse/data /data/docker/clickhouse/log
chmod 777 -R data/ conf/ log/
```
## 拉取鏡像
```shell
#拉取鏡像
docker pull yandex/clickhouse-server
docker pull yandex/clickhouse-client
```
## 創建臨時容器,拷貝文件
- 運行命令創建啟動臨時容器:
```shell
#啟動臨時容器,目的:拷貝容器內配置文件
# -d 后臺運行
# --rm 啟動臨時容器,當容器停掉后,容器自動刪除
# --name 容器名稱
docker run -d --rm --name=temp yandex/clickhouse-server
```
- 將配置文件、數據目錄拷出來做掛載:
```shell
#將容器內配置文件拷貝到宿主機
docker cp temp:/etc/clickhouse-server/users.xml /data/docker/clickhouse/conf/users.xml
docker cp temp:/etc/clickhouse-server/config.xml /data/docker/clickhouse/conf/config.xml
```
- 生成SHA256密碼
```shell
#修改連接用戶名、密碼(users.xml)
#1.執行命令,隨機生成SHA256密碼
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
#2.返回結果
#用戶名:default
#密碼明文:XXXXX
#密碼密文:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#用戶名:root
#密碼明文:YYYYY
#密碼密文:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
```
- 修改users.xml配置文件
```xml
<!-- Users and ACL. -->
<users>
<!-- If user name was not specified, 'default' user is used. -->
<default> <password_sha256_hex>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<!-- Settings profile for user. -->
<profile>readonly</profile>
<!-- Quota for user. -->
<quota>default</quota>
<!-- User can create other users and grant rights to them. -->
<!-- <access_management>1</access_management> -->
</default>
<root> <password_sha256_hex>yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy</password_sha256_hex>
<networks incl="networks" replace="replace">
<ip>::/0</ip>
</networks>
<profile>default</profile>
<quota>default</quota>
</root>
</users>
```
## 銷毀臨時容器,重新以掛載方式運行
- 停止臨時clickhouse容器
```shell
#停止臨時clickhouse容器
docker stop temp
```
- 以目錄掛載方式啟動clickhouse-server容器
```shell
#啟動clickhouse容器
docker run -d --name pocp-clickhouse-server --ulimit nofile=262144:262144 -p 9000:9000 -p 8123:8123 -p 9009:9009 --volume=/data/docker/clickhouse/data:/var/lib/clickhouse:rw --volume=/data/docker/clickhouse/log:/var/log/clickhouse-server:rw --volume=/data/docker/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml --volume=/data/docker/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml yandex/clickhouse-server
```
# 安裝clickhouse-client,測試命令行
## 啟動clickhouse-client客戶端容器
```shell
#啟動clickhouse-client客戶端容器
#docker run -it --link clickhouse-server的容器名稱 clickhouse-client的鏡像id --host clickhouse-server的ip --user default --password
docker run -it --rm --link pocp-clickhouse-server dd0477b8ca59 --host 172.17.0.5 --user default --password
```
# 安裝clickhouse-tabix-web-client
## 啟動clickhouse-tabix-web-client客戶端容器
```shell
# docker部署啟動clickhouse的web客戶端-tabix,加上密碼驗證更安全:
docker run -d --name pocp-clickhouse-tabix -p 8111:80 -e USER='user_name' -e PASSWORD='password' spoonest/clickhouse-tabix-web-client
# 通過瀏覽器訪問:http://IP:8111/#!/login
```