https://github.com/strapdata/docker-elassandra
Docker Image packaging for Elassandra
https://github.com/strapdata/docker-elassandra
cassandra docker elassandra elasticsearch kubernetes
Last synced: 6 months ago
JSON representation
Docker Image packaging for Elassandra
- Host: GitHub
- URL: https://github.com/strapdata/docker-elassandra
- Owner: strapdata
- License: apache-2.0
- Created: 2017-04-14T15:49:24.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2024-12-02T17:27:12.000Z (about 1 year ago)
- Last Synced: 2025-05-08T00:23:42.298Z (9 months ago)
- Topics: cassandra, docker, elassandra, elasticsearch, kubernetes
- Language: Shell
- Size: 260 KB
- Stars: 22
- Watchers: 7
- Forks: 15
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Elassandra docker image
[](https://travis-ci.org/strapdata/docker-elassandra)
This Elassandra image is available on [docker hub](https://hub.docker.com/r/strapdata/elassandra/)
[Elassandra](https://github.com/strapdata/elassandra) is a fork of [Elasticsearch](https://github.com/elastic/elasticsearch) modified to run on top of [Apache Cassandra](http://cassandra.apache.org/) in a scalable and resilient peer-to-peer architecture. Elasticsearch code is embedded in Cassanda nodes providing advanced search features on Cassandra tables and Cassandra serve as an Elasticsearch data and configuration store.
Check-out the [elassandra documentation](http://doc.elassandra.io/en/latest) for detailed instructions.
Commercial support is available from [Strapdata](https://www.strapdata.com).
## Basic usage
```bash
docker pull strapdata/elassandra
```
#### Start a single-node cluster
```bash
docker run --name my-elassandra strapdata/elassandra
```
#### Connect with cqlsh
```bash
docker exec -it my-elassandra cqlsh
```
or :
```bash
docker run -it --link my-elassandra --rm strapdata/elassandra cqlsh my-elassandra
```
#### Connect to Elasticsearch API with curl
```bash
docker exec -it my-elassandra curl localhost:9200
```
or :
```bash
docker run -it --link my-elassandra --rm strapdata/elassandra curl my-elassandra:9200
```
#### Connect to Cassandra nodetool
```bash
docker exec -it my-elassandra nodetool status
```
#### Exposed ports
* 7000: Intra-node communication
* 7001: TLS intra-node communication
* 7199: JMX
* 9042: CQL
* 9142: encrypted CQL
* 9160: thrift service
* 9200: ElasticSearch HTTP
* 9300: ElasticSearch transport
#### Volumes
* /var/lib/cassandra
## Advanced Usage
This image is a fork of the [Cassandra "Official Image"](https://github.com/docker-library/cassandra) modified to run Elassandra.
We added some more features to the images, described below.
### Logging
Elassandra logging is configured with the file [logback.xml](./logback.xml).
It is parametrized with environment variables and thus allows to manage debug levels from your docker env section.
```
LOGBACK_org_apache_cassandra
LOGBACK_org_apache_cassandra_service_CassandraDaemon
LOGBACK_org_elassandra_shard
LOGBACK_org_elassandra_indices
LOGBACK_org_elassandra_index
LOGBACK_org_elassandra_discovery
LOGBACK_org_elassandra_cluster_service
LOGBACK_org_elasticsearch
```
### cgroup memory limit
If CASSANDRA_CGROUP_MEMORY_LIMIT is set to **true** (default is **false**),
add the following JVM properties to the /etc/cassandra/jvm.options file.
This will restrict maximum heap size to cgroup limit.
```
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap
-XX:MaxRAMFraction=2
```
### Kubernetes
A **ready_probe.sh** script can be used for readiness probe as follow:
```yaml
readinessProbe:
exec:
command: [ "/bin/bash", "-c", "/ready-probe.sh" ]
initialDelaySeconds: 15
timeoutSeconds: 5
```
### Configuration
All the environment variables that work for configuring the official Cassandra image continue to work here (e.g `CASSANDRA_RPC_ADDRESS`, `CASSANDRA_LISTEN_ADDRESS`...).
But for convenience, we provide an extended mechanism for configuring almost everything in **cassandra.yaml** and **elasticsearch.yml**, directly from the docker env section.
For instance, to configure cassandra `num_tokens` and elasticsearch `http.port` we do like this :
```bash
docker run \
-e CASSANDRA__num_tokens=16 \
-e ELASTICSEARCH__http__port=9201 \
strapdata/elassandra
```
Notice that `__` are replaced by `.` in the generated yaml files.
It does not work to configure yaml arrays, such as cassandra seeds...
### Run cassandra only
To disable Elasticsearch, set the `CASSANDRA_DAEMON` to `org.apache.cassandra.service.CassandraDaemon`, default is `org.apache.cassandra.service.ElassandraDaemon`.
```bash
docker run \
-e CASSANDRA_DAEMON=org.apache.cassandra.service.CassandraDaemon \
strapdata/elassandra
```
### Init script
Every `.sh` files found in `/docker-entrypoint-init.sh` will be sourced before to start elassandra.
```bash
docker run -v $(pwd)/script.sh:/docker-entrypoint-init.d/script.sh strapdata/elassandra
```
## Use the build tool
Lot of parameters available, see the source [build.sh](./build.sh).
### from a local elassandra repository
```bash
REPO_DIR=../path/to/elassandra-repo ./build.sh
```
Where repo `REPO_DIR` point to an elassandra repository with debian package assembled.
### from local deb package
```bash
PACKAGE_LOCATION=../path/to/elassandra-x.x.x.x.deb ./build.sh
```
### from an url
```bash
PACKAGE_LOCATION=https://some-host.com/path/to/elassandra-x.x.x.x.deb ./build.sh
```
### from the github release page
```bash
RELEASE_NAME=6.2.3.6 ./build.sh
```
The github repository is the same as the docker hub repository `REPO_NAME`, but may differs by setting `GITHUB_REPO_NAME`.
### set the commit sha1
Use the env var `ELASSANDRA_COMMIT`. It is inserted in the image as an env var, and it's used as a tag.
### set the registry
Use the env var `DOCKER_REGISTRY`, for instance `DOCKER_REGISTRY=gcr.io`
### change the base image
By default the image is the official debian stretch, but this is parametrized with the env var `BASE_IMAGE`.
For instance we make also use of : `launcher.gcr.io/google/debian9:latest`.
### publish to registry
Set `DOCKER_PUBLISH=true` to publish the image (be sure to properly authenticate with the registry).
Add `DOCKER_RUN_TESTS=true` to run the tests before to publish.
### image tagging
Add `DOCKER_LATEST=true` to tag the image with the tag `latest`.
Add `DOCKER_MAJOR_LATEST=true` to tag the image with generic version number (e.g `6`, `6.2`, `6.2.3` rather than just `6.2.3.4`).
### troubleshooting
If you got errors such as:
```
gpg: keyserver receive failed: Cannot assign requested address
```
You can solve it by enabling this gpg server multiplexer running on docker :
```
wget -qO- 'https://github.com/tianon/pgp-happy-eyeballs/raw/master/hack-my-builds.sh' | bash
```
## Run the tests
run all:
`./run.sh strapdata/elassandra:tag`
or with debug output:
`DEBUG=true ./run.sh strapdata/elassandra:tag`
only run elassandra-basics tests:
`./run.sh -t elassandra-basics strapdata/elassandra:tag`
only run elassandra-config tests:
`./run.sh -t elassandra-config strapdata/elassandra:tag`
## Kubernetes
To deploy Elassandra on Kubernetes, see the HELM charts repository available at [https://github.com/strapdata/strapcharts](https://github.com/strapdata/strapcharts)
or the [Google Cloud Kubernetes Marketplace](https://console.cloud.google.com/marketplace/details/strapdata/elassandra?filter=solution-type:k8s).