Home

Awesome

Contents

The DataStax base image now uses OpenJDK. Previously we were building with Oracle JDK. Starting with the below image versions and moving forward, prebuilt images on Docker Hub will include OpenJDK. If you would like to use OpenJDK with a version that was built with Oracle JDK we have built new images including OpenJDK with a tag of version-openjdk8

Quick Reference

Where to get help:

DataStax Academy, DataStax Community, Github

Full documentation and advanced tutorials are located within DataStax Academy. Docker Compose examples for deploying DataStax Enterprise with Opscenter and Studio are available on our Github page

Featured Tutorial - DataStax Enterprise 6 Guided Tour

Where to file issues:

Ask questions and get help at the DataStax Community forum.

Maintained by

DataStax

What is DataStax Enterprise

Built on the best distribution of Apache Cassandra™, DataStax Enterprise is the always-on database designed to allow you to effortlessly build and scale your apps, integrating graph, search, analytics, administration, developer tooling, and monitoring into a single unified platform. We power your apps' real-time moments so you can create instant insights and powerful customer experiences.

Prerequisites

Docker for mac

Docker for windows

Creating a DataStax Enterprise container

Use the options described in this section to create DataStax Enterprise server containers.

By default, the DSE server image runs in Cassandra-only mode.. To run with advanced DSE functionality, add the option that enables any combination of search, analytics, and graph to the end of the docker run command.

OptionDescription
-sEnables and starts DSE Search.
-kEnables and starts Analytics.
-gEnables and starts a DSE Graph.

Combine startup options to run more than one feature. For more examples, see Starting DataStax Enterprise as a stand-alone process .

Examples

Create a DSE database container

docker run -e DS_LICENSE=accept --name my-dse -d datastax/dse-server

Create a DSE container with Graph enabled

docker run -e DS_LICENSE=accept --name my-dse -d datastax/dse-server -g

Create a DSE container with Analytics (Spark) enabled

docker run -e DS_LICENSE=accept --name my-dse -d datastax/dse-server -k

Create a DSE container with Search enabled

docker run -e DS_LICENSE=accept --name my-dse -d datastax/dse-server -s

Create a DSE container with Search, Analytics, and Graph enabled

docker run -e DS_LICENSE=accept --name my-dse -d datastax/dse-server -s -k -g

Managing the configuration

Manage the DSE configuration using one of the following options:

Using the DSE conf volume

To use this feature:

  1. Create a directory on your local host.
  2. Download and customize the configuration files you want to use from the config-templates page.
  3. Add the custom configuration files to the host directory you created.
    • The file name must match a corresponding configuration file in the image and include all the required values, for example cassandra.yaml, dse.yaml.
  4. Mount the exposed Volume /config to the local directory.
  5. Start the container. For example to start a database node:
docker run -e DS_LICENSE=accept --name my-dse  -v /dse/config:/config -d datastax/dse-server

Note When you make changes to or add config files to the /config volume, you will need to restart your container with docker restart container_name for DSE to pickup the changes. Restarting the container will restart DSE.

Using environment variables

Configure the DSE image by setting environment variables when the container is created using the docker run command -e flag.

VariableSettingDescription
DS_LICENSEacceptRequired. Set to accept to acknowledge that you agree with the terms of the DataStax license. To show the license, set the variable DS_LICENSE to the value accept. The image only starts if the variable set to accept.
LISTEN_ADDRESSIP_addressThe IP address to listen for connections from other nodes. Defaults to the container's IP address.
BROADCAST_ADDRESSIP_addressThe IP address to advertise to other nodes. Defaults to the same value as the LISTEN_ADDRESS.
NATIVE_TRANSPORT_ADDRESSIP_addressThe IP address to listen for client/driver connections. Default: 0.0.0.0.
NATIVE_TRANSPORT_BROADCAST_ADDRESSIP_addressThe IP address to advertise to clients/drivers. Defaults to the same value as the BROADCAST_ADDRESS.
SEEDSIP_addressThe comma-delimited list of seed nodes for the cluster. Defaults to this node's BROADCAST_ADDRESS.
START_RPCtrue | falseWhether or not to start the Thrift RPC server. Will leave the default in the cassandra.yaml file if not set.
CLUSTER_NAMEstringThe name of the cluster. Default: Test Cluster.
NUM_TOKENSintThe number of tokens randomly assigned to the node. Default: not set .
DCstringDatacenter name. Default: Cassandra.
RACKstringRack name. Default: rack1.
OPSCENTER_IPIP_address | stringAddress of OpsCenter instance to use for DSE management; it can be specified via linking the OpsCenter container using opscenter as the name.
JVM_EXTRA_OPTSstringAllows setting custom Heap using -Xmx and -Xms.
LANGstringAllows setting custom Locale
SNITCHstringThis variable sets the snitch implementation this node will use. It will set the endpoint_snitch option of cassandra.yaml. Default: GossipingPropertyFileSnitch
DSE_AUTO_CONF_OFFstringSometimes users want to set all variables in the config files. For these situations one must prevent default environment variables from overriding those values. This setting lets you provide a comma-separated list of filenames (options are cassandra.yaml and cassandra-rackdc.properties) that will not accept the Environmental variables or can be set to 'all' to disable default environment variables being set within either file.

Volumes and data

To persist data, pre-create directories on the local host and map the directory to the corresponding volume using the docker run -v flag.

NOTE: If the volumes are not mounted from the local host, all data is lost when the container is removed.

DSE images expose the following volumes.

docker run -v <local_directory>:<container_volume>

See Docker docs > Use volumes for more information.

Running DSE commands and viewing logs

Use the docker exec -it <container_name> command to specific commands.

docker exec -it my-dse nodetool status

Opening an interactive bash shell

If the container is running in the background (using the -d), use the following command to open an interactive bash shell to run DSE commands.

docker exec -it <container_name> bash

To exit the shell without stopping the container type exit.

Opening an interactive CQL shell (cqlsh)

Use the following command to open cqlsh.

docker exec -it <container_name> cqlsh

Viewing logs

You can view the DSE logs using the Docker log command. For example:

docker logs my-dse

Creating an Opscenter Container

Follow these steps to create an Opscenter container and a connected DataStax Enterprise server container on the same Docker host.

To create and connect the containers:

  1. First create an OpsCenter container.

    • docker run -e DS_LICENSE=accept -d -p 8888:8888 --name my-opscenter datastax/dse-opscenter

    • See OpsCenter Docker run options for additional options that persist data or manage configuration.

  2. Create a DataStax Enterprise (DSE) server container that is linked to the OpsCenter container.

    • docker run -e DS_LICENSE=accept --link my-opscenter:opscenter --name my-dse -d datastax/dse-server
  3. Get the DSE container IP address:

    • On the host running the DSE container run

    • docker inspect my-dse | grep '"IPAddress":'

  4. Open a browser and go to http://DOCKER_HOST_IP:8888.

  5. Click Manage existing cluster.

  6. In host name, enter the DSE IP address.

  7. Click Install agents manually. Note that the agent is already installed on the DSE image; no installation is required.

OpsCenter is ready to use with DSE. See the OpsCenter User Guide for detailed usage and configuration instructions.

Creating a Studio Container

Follow these steps to create a DataStax Studio container that is connected to a DataStax Enterprise (DSE) server container on the same Docker host.

To create and connect the containers:

  1. Create a DataStax Studio container:
docker run -e DS_LICENSE=accept --link my-dse --name my-studio -p 9091:9091 -d datastax/dse-studio
  1. Open a browser and go to http://DOCKER_HOST_IP:9091

  2. Create the new connection using my-dse as the hostname, see DataStax Studio User Guide > Creating a new connection for further instructions.

Studio is ready to use with DSE. See DataStax Studio User Guide for detailed usage and configuration instructions.

Building

The code in this repository builds the DSE, Opscenter, DDAC and Studio Docker images. To get started, clone this repo and modify for your requirements.

This repo uses Gradle to build the images.

Requirements:

By default, Gradle will download DataStax tarballs from DataStax Academy.

DataStax uses a common base image for all products. If you would like to customize the OS, install additional packages etc, you would modify the base/Dockerfile.

In order to support multiple product versions, but without duplicating files, Docker build contexts are generated out of source folders that might contain FreeMarker templates (the files with .ftl extensions). The following conventions are important to remember:

If you would like to customize DSE, Opscenter, Studio or DDAC you would need to modify templates in their corresponding folder.

Building a product image for a given version requires invoking a Gradle task that follows the pattern:

./gradlew build<Product><Version>Image

For example: if you want to build DSE 5.1.10, you need to say

./gradlew buildServer5.1.0Image

on the command line.

You can build many images at once:

./gradlew buildServer5.1.0Image buildServer6.7.0Image buildOpscenter6.7.0Image

Publishing an image to a registry (default: Docker Hub) requires invoking a Gradle task that follows the pattern:

./gradlew push<Product><Version>Image

Pushing to a private registry requires providing the registry url and the credentials either through project properties on the command line or via gradle.properties file:

dockerRegistry=https://your.private.registry.org
registryUsername=<USERNAME>
registryPassword=<PASSWORD>

Run ./gradlew tasks to get the list of all available tasks.

Next Steps

Head over to DataStax Academy for advanced documentation including

Known Limitations

License