【问题标题】:Cassandra CQL (cqlsh) docker container to docker Cassandra clusterCassandra CQL (cqlsh) docker 容器到 docker Cassandra 集群
【发布时间】:2020-10-03 04:34:49
【问题描述】:

我正在尝试为 Cassandra CQL 创建一个新的 docker 容器,该容器连接到作为另一个 docker 容器运行的 Cassandra 集群。

现状:

我通过执行以下命令创建了一个新的 Cassandra 映像“cassandra”和名为“container-node”的容器:

  • docker pull cassandra
  • 码头图片 | grep cassandra
  • docker run -d --name cassandra-node --publish 9042:9042 cassandra
  • 连接到容器:docker exec -it cassandra-node bash (在 127.0.0.1:9042 连接到测试集群)

键空间创建

  • 创建键空间:CREATE KEYSPACE first_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}
  • 连接到密钥空间:使用 first_keyspace
  • 创建表:CREATE TABLE first_keyspace.user (USERID int PRIMARY KEY, USERNAME text, CITY text); 插入数据:
  • 插入用户(用户 ID、用户名、城市)值(1、'JOHN'、'PARIS');
  • 插入用户(用户 ID、用户名、城市)值(2、'ABD'、'SAFRICA');
  • 获取数据:select * from user;

详细问题说明

想要为 CQL (cqlsh) 创建一个新的 Docker 容器(使用 Dockerfile),它将执行以下任务:

  1. 连接到作为 Docker 容器 (cassandra-host) 运行的 Cassandra 集群
  2. 执行从 source.sql 文件读取的所有任务添加/更新/删除功能。

我想知道我可以从哪里开始。 任何帮助,指点将不胜感激。

【问题讨论】:

  • 为什么不直接使用docker exec -ti running_image cqlsh
  • 亚历克斯,感谢您的回复。我需要另一个容器作为 cqlsh,它将连接到外部 Cassandra 集群以执行键空间执行。
  • 只使用同一张图片,只是覆盖入口点

标签: docker cassandra cql cqlsh


【解决方案1】:

不确定 cassandra 是否支持 .sql 文件。我认为这是一个错字。

从 .cql 文件加载数据的命令如下:

bin/cqlsh --file 'file_name'

您需要做的就是在容器中运行这样的命令。但在此之前,您需要确保该文件可在容器内访问。执行此操作的两种方法是在创建映像(针对初始化脚本类型的要求)和卷映射(针对其他要求)期间复制容器内的文件。示例 Dockerfile:

FROM cassandra
COPY some-file.cql /home/some-file.cql
CMD["cqlsh","<cassandra-docker-container-ref>","-f","/home/some-file.sql"]

这里的cassandra-docker-container-ref 可以是您的 cassandra docker 服务器的 ID 或名称。我建议用名字。

使用如下命令构建映像:

docker build -t cassandra-seed-script .

并将图像作为容器运行并立即将其删除:

docker run -it --rm cassandra-seed-script 

如果您需要使用不同的 cql 文件定期执行此操作,请使用主机卷映射容器中的位置并使命令动态化(或在启动容器时传递命令)。

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 2017-04-21
    • 2016-04-11
    • 2016-09-12
    • 2016-05-30
    • 2022-10-25
    • 2015-01-10
    • 2014-09-30
    • 2018-04-22
    相关资源
    最近更新 更多