如何为包含模式的cassandra(或任何数据库)创建Dockerfile?

ada*_*dev 7 cassandra docker

我想创建一个dockerfile,它可以在图像启动时使用键空间和模式构建Cassandra映像.

在一般情况下,你如何创建一个Dockerfile,将建立包括一些步骤中不能真正直到容器完成正在运行,至少在第一时间内进行拍摄?

现在,我有两个步骤:从现有的cassandra Dockerfile构建cassandra映像,该文件将带有CQL模式文件的卷映射到临时目录,然后使用cqlsh运行docker exec以在映像启动后导入模式容器.

但这不会创建一个带有架构的图像 - 只是一个容器.该容器可以保存为图像,但这很麻烦.

    docker run --name $CASSANDRA_NAME -d \
        -h $CASSANDRA_NAME \
        -v $CASSANDRA_DATA_DIR:/data \
        -v $CASSANDRA_DIR/target:/tmp/schema \
        tobert/cassandra:2.1.7
Run Code Online (Sandbox Code Playgroud)

然后

docker exec $CASSANDRA_NAME cqlsh  -f /tmp/schema/create_keyspace.cql
docker exec $CASSANDRA_NAME cqlsh  -f /tmp/schema/schema01.cql
# etc
Run Code Online (Sandbox Code Playgroud)

这有效,但它使得无法使用像Docker这样的工具,因为链接的容器/服务也将启动并期望架构到位.

我看到了一个企图在那里为试图在构建过程中Dockerfile后台启动,然后运行cqlsh卡桑德拉的过程,但我不认为工作太清楚了.

doa*_*hai 6

好的,我遇到了这个问题,有人建议我应对一些策略:

  1. 从现有的Cassandra Dockerfile开始,例如官方文件
  2. 删除ENTRYPOINT的东西
  3. 将模式(.cql)文件和数据(.csv)复制到映像中,并将其放在某个位置,例如/ opt / data
  4. 创建一个shell脚本,该脚本将用作启动Cassandra的最后一个命令

    一种。用$ CASSANDRA_HOME / bin / cassandra启动cassandra

    b。如果有$ CASSANDRA_HOME / data / data / your_keyspace-xxxx文件夹并且它不为空,则无需执行其他操作

    C。其他

    1. sleep some time to allow the server to listen on port 9042
    2. when port 9042 is listening, execute the .cql script to load csv files
    
    Run Code Online (Sandbox Code Playgroud)

我发现此过程相当繁琐,但似乎没有其他解决方法。对于Cassandra动手实验,我发现使用Vagrant和Ansible创建VM映像更加容易。

  • 嗨,这似乎正是我所需要的!但是,您能否提供Dockerfile和Shell脚本的示例? (3认同)