Deployment Guide (preview)

Image repository

Imply Manager is provided as a pair of Docker images available on Docker Hub. There is one image for the manager container which includes the coordination services and manager application, and another image for the agent containers which become the nodes of one or more Druid clusters. At this time, a deployment will always have a single manager and multiple agents. Support for running multiple managers for high availability will be offered in the near future.

The images are available in the imply/onprem-manager and imply/onprem-agent Docker Hub repositories. These are private repositories, and you will need to provide your Docker ID to Imply in order to gain access.

Configuring the manager container

The recommended way to configure the manager container is to create a configuration file that can be passed to the container using the --env-file Docker run argument. The remainder of this documentation will assume this file is named env.list.

Mandatory properties

The following items are required:



Note: The database name (IMPLY_MANAGER_STORE_DATABASE) should not contain any spaces or dashes.

The Imply Manager application and the Druid clusters require an external MySQL database, version 5.7.21 or later. Ensure that this database will be reachable from the manager container and all agent containers.

You will also require a valid license key, which can be obtained by contacting a representative at Imply.

Optional properties

Druid clusters require:

You can provide default values for these external dependencies so that they don't need to be specified at cluster creation time. To do so, provide the following parameters in the env.list file:



imply_defaults_deepStorageType={'s3' / 'hdfs' / 'local'}
imply_defaults_deepStorageBaseLocation=s3://{bucket}/{prefix} # s3
# imply_defaults_deepStorageBaseLocation=hdfs://{namenode_host}:8020/{prefix} # hdfs
# imply_defaults_deepStorageBaseLocation=/mnt/var/druid/storage # local

# Not necessary if providing your credentials elsewhere, e.g. using an EC2 instance role
# imply_defaults_deepStorageS3AccessKey={s3_access_key}
# imply_defaults_deepStorageS3SecretKey={s3_secret_key}

Configuring the agent containers

The agent containers only require a single configuration - setting the environment variable IMPLY_MANAGER_HOST to the hostname of the manager container. The agent will register with the manager and will pull any additional configurations that are required.

It is important that IMPLY_MANAGER_HOST be a name that is resolvable and routable from the agent containers. Appropriate values to use here depends on what Docker networking configuration you plan to use. For Linux-host deployments not utilizing a container orchestration system (Kubernetes, Docker Swarm, etc.), running a single container per host and starting the container with the --network host configuration is a common setup. In this case, IMPLY_MANAGER_HOST would be the externally addressable name or address of the host machine running the manager container. Note that --network host is not a supported option on OSX. See the Networking section for suggestions on how to run the container in OSX.

Running the container


Your Docker run command will vary based on the networking configuration chosen. Note the following important ports:

For proper cluster coordination, the manager and agent containers should be able to talk to each other. In most default networking configurations, containers can talk to each other unrestricted. If you need to allow access on specific ports, the ones used for cluster coordination are:

Host networking (Linux only)

The recommended deployment strategy if you are not using a container orchestration system and you are using a Linux host is to use host networking. In this configuration, the container will use the host's network stack, which will provide the best performance as there is no need for packets to be routed to a container's separate network stack. You would access the Imply Manager on port 9097 of the host system.

Note: Do not run multiple containers using host networking on a single host. You will encounter port conflicts and the agents will fail to properly register with the manager.

User-defined bridge

On a non-Linux host, you are unable to use host networking since the containers do not run natively on the host but run in a virtual machine. The recommended alternative is to use a user-defined bridge network. To create a bridge network, run:

docker network create imply

You will then be able to use this network when running containers by specifying --network imply and will be able to address a container from other containers by its container name.


Your Docker run command will also vary depending on if you plan to use Docker volumes or bind mounts. Note that by default, Docker runs containers on the host's primary storage device, which may not have sufficient space, particularly for Imply data nodes. You can either configure Docker to move these containers to a secondary device on the host, or use volumes/binds to mount another location inside the container. By default, Imply writes temporary files, logs, and caches to the /mnt directory, so this is a good path to mount a larger volume. See the Docker volume documentation for more information.

Docker Run

Host network example (Linux only)

As an example, running the manager and agent using host networking, with a bind mount on /mnt, and using a configuration file named env.list would look like this. The commands must be run on different host machines:

docker run --rm --network host --env-file env.list --mount type=bind,source=/mnt,target=/mnt imply/onprem-manager
docker run --rm --network host -e "IMPLY_MANAGER_HOST=imply-manager" --mount type=bind,source=/mnt,target=/mnt imply/onprem-agent

User-defined network example

As another example, running the manager and agent using a user-defined network named imply with a configuration file named env.list and the IMPLY_MANAGER_HOST property set to match a manager container name of 'imply-manager' would look like this:

docker run --rm --network imply --name imply-manager -p 9097:9097 --env-file env.list imply/onprem-manager
docker run --rm --network imply -p 9095 -p 8888 -e "IMPLY_MANAGER_HOST=imply-manager" imply/onprem-agent

Once the manager container is running, you can access the Imply Manager application at http://<managerHost>:9097

Additional topics

Adding custom user files

Custom user files can be pushed by the manager to the nodes of the Imply cluster by specifying them in the Setup / Advanced Config section of the manager. These files can be written to the following locations:

Additionally, these files can be processed as follows:

There are two ways to make these files available to the manager:

To make the files available to the manager locally, they will need to be placed in the /mnt/var/user directory inside the manager container. There are two ways to do this:

--mount type=bind,source=/myfiles,target=/mnt/var/user

Once the files are available in that directory, reference them using the manager:/// scheme. As an example:

Manually Creating the Metadata Databases

Imply Manager will automatically attempt to create the required databases if they do not exist. There is one database for the manager application and one database for each Imply cluster. In the case that the provided user does not have authorization to create these databases, you should create them manually prior to running the application. Both Druid and the Imply Manager expect a database with a 'utf8mb4' default character set. An example statement to create the manager database:




Manage Data

Query Data



Special UI Features

Imply Manager