Warp 10 Docker Image – Next Generation

Learn about the changes of the new version of Warp 10 platform Docker images.

Warp 10 Docker image, next generation

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.