Learn about the changes of the new version of Warp 10 platform Docker images.
This article introduces some changes and enhancements to the Docker version of the Warp 10 platform.
A new base image
Starting with version 1.2.22
of Warp 10, we chose openjdk:8-jre-alpine as our base image. At that time, we wanted to move to an official Docker image with OpenJDK, and reduce the image footprint by using Alpine as the relying OS.
This also allows us to provide our Docker image for multiple architectures:
- linux/amd64: for Intel processors
- linux/arm/v7: for small devices (e.g. some Raspberry PI)
- linux/arm64: for Mac, Pine64 or Raspberry PI
The OpenJDK Docker project is now deprecated for non-recent versions of Java and encourages migration to other projects.
The base image we use has not evolved in 4 years and some of our users also report bugs with the linux/arm/v7 as well.
Time to change and improve Warp 10 for Docker!
Among the alternatives offered, we choose Eclipse-Temurin for our base layer. It is an official Docker image that offers several OS variants and architectures. The Eclipse Adoptium project which supports Temurin will maintain the JDK 8 until at least November 2026.
Spoiler alert, SenX will soon release a 3.0 version of the Warp 10 platform with an upgraded JDK. (no ETA defined).
This is also an opportunity to offer 2 variants for our base layer:
- Ubuntu (focal): use glibc, more widely used, but a bit bigger footprint.
- Alpine: use musl, when small size matters.
Multi architecture option
For most of our users, this won’t be a change, but you may be affected if you use a non-amd64 architecture.
The Eclipse-Temurin project does not provide multi-architecture for the Alpine variant but instead for Ubuntu.
So we now provide linux/amd64, linux/arm/v7, linux/arm64 for the Ubuntu variant and only linux/amd64 for the Alpine variant.
This is a drop-in replacement if you don’t use the Warp 10 image as the base layer for your custom image.
Partial removal of Sensision
The monitoring of the running container has changed. The Sensision software has been removed, so there is now only one process running (i.e.: Warp 10), respecting the principle of one process per container.
This does not mean that Warp 10 is no longer monitored. Instead, we use the SENSISION.DUMP WarpScript function provided by the Sensision extension and a dedicated pair of tokens. There is a runner that collects metrics on the local Warp 10 instance every minute and stores them into it. This is now the default behavior. You can disable this monitoring by configuring your container with an environment variable:
docker run -e NO_SENSISION=true warp10io/warp10:tag
Plugins and extensions
HFStore is of course still integrated and we strongly recommend using it. Check out this article to learn more about this great tool.
The same goes for WarpStudio, and it will be getting some major improvements soon.
There are also 2 more extensions enabled by default: Tokengen and Sensision.
Some improvements
We have reduced the startup time of the container, this does not change much when you are running a loaded instance, but for testing purposes or CI context, it helps.
There is also now a health check to test if the Warp 10 instance is still running.
Configuring the Docker Image
Here is a step-by-step example of running Warp 10 and Discovery Explorer with a Docker Compose file.
Prerequisite:
- Install docker and docker compose (on a debian/ubuntu system,
sudo apt install docker.io docker-compose
) - Add yourself to docker group (
sudo usermod -a -G docker $USER
)
First, create a directory for test purposes:
mkdir -p /var/tmp/warp10.docker
cd /var/tmp/warp10.docker
Then, copy the following definition into the docker-compose.yml
file
version: "3"
services:
warp10-service:
image: warp10io/warp10:2.11.1-ng-2-ubuntu # Always set a specific version
environment:
- WARP10_HEAP=2g # Memory available for the Warp 10 instance at start, should be equal to WARP10_HEAP_MAX to avoid reallocation
- WARP10_HEAP_MAX=2g # Max memory available for the Warp 10 instance, keep some marge with the total available memory of your container
- NO_SENSISION=true # If true, disable monitoring, otherwise enable
- IN_MEMORY=true # If true, in-memory persistence, otherwise disk persistence
volumes:
- warp10_data:/data # Named volume
# - warp10_data:/data:z # Use this line instead of the previous if you have SELinux enabled
- /var/tmp/warp10.docker/99-custom.conf:/config.extra/99-custom.conf # Bind mount to define specific config
ports:
- 8080:8080 # Warp 10 endpoint
- 8081:8081 # WarpStudio
- 4378:4378 # HFStore /fetch endpoint
restart: unless-stopped
discovery:
image: warp10io/discovery-explorer:1.0.54
volumes:
- discovery_data:/data # Named volume
ports:
- 9090:3000 # Discovery explorer endpoint
restart: unless-stopped
volumes:
warp10_data:
discovery_data:
Set some configuration by copying the following into the 99-custom.conf
file.
//
// Limits
//
warpscript.maxops = 100000000000
warpscript.maxbuckets = 1000000000
warpscript.maxgeocells = 10000000
warpscript.maxdepth = 100000000
warpscript.maxfetch = 100000000000
warpscript.maxloop = 5000000
warpscript.maxdepth = 100000
// LOGMSG, NOLOG, STDERR, STDOUT, TDESCRIBE
warpscript.extension.debug = io.warp10.script.ext.debug.DebugWarpScriptExtension
// WSPS WSINFO WSKILL STACKPSSECRET
warpscript.extension.stackps = io.warp10.script.ext.stackps.StackPSWarpScriptExtension
Start the containers:
$ docker-compose up -d
Creating volume "warp10docker_warp10_data" with default driver
Creating volume "warp10docker_discovery_data" with default driver
Creating warp10docker_warp10-service_1 ... done
Creating warp10docker_discovery_1 ... done
Define a sample dashboard by copying the following into the example.mc2
file:
// @endpoint http://127.0.0.1:8080/api/v0/exec
// @theme dark-blue
{
'title' 'Discovery Dashboard'
'description' 'test dashboard'
'tiles' [
{
'title' 'random data, autorefresh'
'options' { 'autoRefresh' 1 'showErrors' true }
'x' 0 'y' 0 'w' 12 'h' 2
'type' 'area'
'macro' <%
1 4 <% DROP
NEWGTS 'g' STORE
1 10 <%
'ts' STORE $g $ts RAND + STU * NOW + NaN NaN NaN RAND ADDVALUE DROP
%> FOR
$g
%> FOR
%>
}
]
}
Copy the dashboard into Discovery Explorer, use the name given by the docker-compose
command (or docker ps
):
docker cp ./example.mc2 warp10docker_discovery_1:/data
View the dashboard by clicking on the top left menu: http://localhost:9090
Warning, Docker creates volumes in its persistent state directory,
/var/lib/docker
by default. Make sure you have enough space there. This can be changed by configuring the docker daemon with:--data-root
.
Check where the Warp 10 volume is created, use the name given by the docker-compose
command:
docker volume inspect <warp10docker_warp10_data>
Takeaways
This article was a brief introduction to the new docker images for the Warp 10 platform. We hope you will find these changes useful.
The images are available on the Docker Hub. If you have any questions about these new images you can jump to the Lounge. Also, feel free to report any issues that you may have found on the dedicated GitHub page.
Read more
The Py4J plugin for Warp 10
Warp 10 scheduler secrets
Archiving Time Series Data into Amazon S3
Senior Software Engineer