Cassandra provides the primary data persistence layer for Teamwork Cloud.

Building Cassandra image

To build a Cassandra image


  1. Create the following files:
    1. cassandra/Dockerfile
      FROM cassandra:5.0.5
      
      # 1. Fix JVM 17 Logging (Added double-colon before file rotation options)
      RUN echo "-Xlog:gc=info,heap*=info:file=/var/log/cassandra/gc.log::filecount=10,filesize=10485760" >> /etc/cassandra/jvm17-server.options
      
      # 2. Fix "HEAP_NEWSIZE “
      RUN sed -i 's/^HEAP_NEWSIZE=.*/#HEAP_NEWSIZE=/' /etc/cassandra/cassandra-env.sh
      
      # 3. Optional configuration tuning
      RUN sed -i -e 's/^#commitlog_segment_size:.*/commitlog_segment_size: 192MiB/' \
                 /etc/cassandra/cassandra.yaml
      SHELL
    2. cassandra/docker-compose.yml
      Change mem_limit,MAX_HEAP_SIZE,HEAP_NEWSIZE as needed.

      version: '2.4'
      services:
        cassandra:
          build: .
          container_name: cassandra
          image: localhost/twc_cassandra:latest
          mem_limit: 2g
          ports:
            - "9042:9042"
            - "9160:9160"
          environment:
            - CASSANDRA_SEEDS=cassandra
            - CASSANDRA_LISTEN_ADDRESS=cassandra
            - MAX_HEAP_SIZE=1000M
            - HEAP_NEWSIZE=100M
          volumes:
            - ../data/cassandra/cassandra_data:/var/lib/cassandra
            - ../data/cassandra/cassandra_logs:/var/log/cassandra
          networks:
            - twc-net
          healthcheck:
            test: ["CMD", "cqlsh", "-e", "describe keyspaces"]
            interval: 5s
            timeout: 5s
            retries: 60
      networks:
        twc-net:
          external: true
      
      
      SHELL
  2. Build the image by running the following command:
    docker compose build --no-cache cassandra
    SHELL


  3. Start Cassandra by running the following command within the Cassandra folder:
    docker compose up -d
    SHELL
  4. Run a health check by executing the following command to check if Cassandra is operational:
    docker exec -it cassandra  bash -c 'cqlsh -e "describe keyspaces" && nodetool status && nodetool version'
    SHELL