mistral/tools/docker/DOCKER_README.rst
Pierre Gaxatte e4694009d9 Fix docker image not building
Also adds a line in the readme to use the mistral client inside the
mistral container.

Change-Id: Ie09b06f682679b9a90d18b8796c47b69e91d14cf
Closes-Bug: 1782531
2018-08-01 05:08:48 +00:00

6.7 KiB

Using Mistral with Docker

Docker containers provide an easy way to quickly deploy independent or networked Mistral instances in seconds. This guide describes the process to launch an all-in-one Mistral container.

Docker Installation

The following links contain instructions to install latest Docker software:

Build the Mistral Image Manually

Execute the following command from the repository top-level directory:

docker build -t mistral -f tools/docker/Dockerfile .

The Mistral Docker image has one build parameter:

Name Default value Description
BUILD_TEST_DEPENDENCIES false If the BUILD_TEST_DEPENDENCIES equals true, the Mistral test dependencies will be installed inside the Docker image

Running Mistral using Docker Compose

To launch Mistral in the single node configuration:

docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
             -f tools/docker/docker-compose/mistral-single-node.yaml \
             -p mistral up -d

To launch Mistral in the multi node configuration:

docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
             -f tools/docker/docker-compose/mistral-multi-node.yaml \
             -p mistral up -d

The infrastructure docker-compose file contains examples of RabbitMQ, PostgreSQL and MySQL configurations. Feel free to modify the docker-compose files as needed.

The docker-compose Mistral configurations also include the CloudFlow container. It is available at link

The --build option can be used when it is necessary to rebuild the image, for example:

docker-compose -f tools/docker/docker-compose/infrastructure.yaml \
             -f tools/docker/docker-compose/mistral-single-node.yaml \
             -p mistral up -d --build

Running the Mistral client from the Docker Compose container

To run the mistral client against the server in the container using the client present in the container:

docker run -it mistral_mistral mistral workflow-list

Configuring Mistral

The Docker image contains the minimal set of Mistral configuration parameters by default:

Name Default value Description
MESSAGE_BROKER_URL rabbit://guest:guest@rabbitmq:5672 The message broker URL
DATABASE_URL sqlite:///mistral.db The database URL
UPGRADE_DB false If the UPGRADE_DB equals true, a database upgrade will be launched before Mistral main process
MISTRAL_SERVER all Specifies which mistral server to start by the launch script.
LOG_DEBUG false If set to true, the logging level will be set to DEBUG instead of the default INFO level.
RUN_TESTS false If the UPGRADE_DB equals true, the Mistral unit tests will be launched inside container

The /etc/mistral/mistral.conf configuration file can be mounted to the Mistral Docker container by uncommenting and editing the volumes sections in the Mistral docker-compose files.

Launch tests inside Container

Build mistral:

docker build -t mistral -f tools/docker/Dockerfile \
      --build-arg BUILD_TEST_DEPENDENCIES=true .

Run tests using SQLite:

docker run -it -e RUN_TESTS=true mistral

or PostgreSQL:

docker run -it \
  -e DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres \
  -e RUN_TESTS=true mistral

Keycloak integration

If you set AUTH_ENABLE to True value in the mistral.env file then Mistral will enable Keycloak integration by default. Keycloak will be deployed with mistral/mistral credentials. You should uncomment the volume line in the infrastructure.yaml for the CloudFlow.

Next step you login in the administrative console using the http://localhost:8080/auth/admin URL. Create a oauth client, you can specify only a name, for example mistral.

Specify valid redirect URL: http://localhost:8000/* and turn on the "Implicit Flow Enabled" in the your client page. Save your changes.

Add the following line to your /etc/hosts file:

127.0.0.1   keycloak

Export the following environments variable for mistral cli:

export MISTRAL_AUTH_TYPE=keycloak-oidc
export OS_AUTH_URL=http://keycloak:8080/auth
export OS_TENANT_NAME=master
export OS_USERNAME=mistral
export OS_PASSWORD=mistral
export OS_MISTRAL_URL=http://localhost:8989/v2
export OPENID_CLIENT_ID=mistral
export OPENID_CLIENT_SECRET=
export MISTRALCLIENT_INSECURE=True

Check your configuration:

mistral workflow-list

Or open a cloud flow page in a browser:

http://localhost:8000

Using Mistral Client

The Mistral API will be accessible from the host machine on the default port 8989. Install python-mistralclient on the host machine to execute mistral commands.