从 docker-compose 文件在 Dockerized Clickhouse 实例中创建数据库和表

问题描述 投票:0回答:5

我的要求是当我使用 docker-compose 启动 Clickhouse 时在其中创建数据库和表。如果是mysql,我这样做:

mysql_1:
      image: mysql:5.7.16
      environment:
        MYSQL_DATABASE: "one"
        MYSQL_USER: "one_user"
        MYSQL_PASSWORD: "one_user_pass"
        MYSQL_ROOT_PASSWORD: "root"
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      volumes:
       - ./data/one:/docker-entrypoint-initdb.d
      ports:
        - "3306:3306"

有什么方法可以为 Clickhouse 实例实现相同的效果吗?

docker docker-compose clickhouse yandex
5个回答
6
投票

我找到了一个不太干净的解决方案。它基本上是将主机目录安装到容器中并运行所有“创建表”和“插入”语句,只要我们不清理已安装的文件夹,就会持续存在!

clickhouse:
  image: yandex/clickhouse-server:18.10
  ports:
    - "8123:8123"
    - "9000:9000"
  volumes:
   - ./data/clickhouse/data:/var/lib/clickhouse

5
投票

随着 添加 docker-entrypoint-initdb.d 支持#3695,Clickhouse-server 现在支持在服务器的 docker 镜像中运行初始化脚本。

例如,在 Dockerfile 中:

FROM clickhouse/clickhouse-server 
ADD  ./docker-entrypoint-initdb.d /docker-entrypoint-initdb.d

docker-entrypoint-initdb.d
中添加您的sql文件并构建它。

当您从镜像生成容器时,

docker-entrypoint-initdb.d
中的所有脚本都会运行。

顺便说一句,除了问题之外,我在任何地方都找不到关于它的文档....


2
投票

您可以使用 docker init 服务来初始化 Clickhouse。除了 Clickhouse 服务之外,尝试使用将初始化数据库的相同 docker 映像来添加服务

clickhouse-init:
    image: clickhouse/clickhouse-server:23.5
    volumes:
      - ./clickhouse:/var/clickhouse
    depends_on:
      - clickhouse
    networks:
      - ch_ntw
    entrypoint: [ '/bin/sh', '-c' ]
    command: |
      "
      while ! clickhouse-client --host clickhouse --user your-user --password your-password -q \"SHOW databases;\"; do
          echo waiting for clickhouse up
          sleep 1
      done

      clickhouse-client --host clickhouse --user your-user --password your-password --queries-file /var/clickhouse/schema/init_database.sql

      tail -f /dev/null
      "

此 docker 服务将等待 Clickhouse 启动,然后执行您的

init_database.sql
脚本


0
投票

我已经检查了

Clickhouse
,我认为它默认情况下不提供相同的功能Clickhouse dockerfile

您可以通过添加自己的要求(例如执行文件)来自定义

Clickhouse
图像。因此,您所要做的就是使用
Clickhouse
作为自定义映像的基础映像,然后编写一个 bash 脚本,该脚本可用作自定义映像的入口点,并使其根据环境变量创建数据库/表您将提供,然后让它在最后启动服务。


0
投票

您可以使用 nafigat0r/clickhouse-server:18.12 docker 镜像。在

docker-compose.yml
中设置环境变量
DATABASE_NAME
用于创建(或使用)特定数据库。您可以选择设置
DATABASE_PORT
来指定特定的 TCP 端口使用情况。

当前图像版本对 SQL 查询有一些限制:每个文件一个。不支持多查询的文件。

© www.soinside.com 2019 - 2024. All rights reserved.