Quick Start
Each quick start setup is a directory under dial-docker-compose/ containing a docker-compose.yml that includes a shared base file (common.yml) and adds setup-specific services.
Common services
dial-docker-compose/common.yml defines four services shared by all quick start setups:
| Service | Image | Role |
|---|---|---|
core | epam/ai-dial-core | API server. Mounts settings.json, gflog.xml, and config.json from the host. |
chat | epam/ai-dial-chat | Web UI. Connects to Core for API access and Themes for UI assets. Uses API key authentication (no identity provider). |
redis | redis:7.2.4-alpine3.19 | In-memory cache for Core. Configured as a volatile cache with no persistence. |
themes | epam/ai-dial-chat-themes | Static file server for Chat theme CSS, images, and configuration. |
Each setup-specific docker-compose.yml includes common.yml via the include directive:
include:
- path: ../common.yml
env_file: ./.env
DIAL service definitions pin platform: linux/amd64 because the epam/ai-dial-* images are currently published for linux/amd64 only. On Apple Silicon Macs this makes Docker run them under emulation explicitly, avoiding "platform mismatch" warnings. Third-party images (redis, keycloak, ollama) are intentionally left unpinned so they use their native arm64 builds. Publishing multi-architecture epam/ai-dial-* images with native arm64 variants is a future goal — once available, these platform: lines can be removed.
Full common.yml
services:
themes:
image: epam/ai-dial-chat-themes:0.9.1
platform: linux/amd64
ports:
- "3001:8080"
chat:
ports:
- "3000:3000"
image: epam/ai-dial-chat:0.26.0
platform: linux/amd64
depends_on:
- themes
- core
environment:
NEXTAUTH_SECRET: "secret"
THEMES_CONFIG_HOST: "http://themes:8080"
DIAL_API_HOST: "http://core:8080"
DIAL_API_KEY: "dial_api_key"
ENABLED_FEATURES: "conversations-section,prompts-section,top-settings,..."
KEEP_ALIVE_TIMEOUT: ${CHAT_KEEP_ALIVE_TIMEOUT:-20000}
redis:
image: redis:7.2.4-alpine3.19
restart: always
ports:
- "6379:6379"
command: >
redis-server
--maxmemory 2000mb
--maxmemory-policy volatile-lfu
--save ""
--appendonly no
--loglevel warning
mem_limit: 2200M
core:
user: ${UID:-root}
ports:
- "8080:8080"
image: epam/ai-dial-core:0.25.1
platform: linux/amd64
environment:
'AIDIAL_SETTINGS': '/opt/settings/settings.json'
'JAVA_OPTS': '-Dgflog.config=/opt/settings/gflog.xml'
'LOG_DIR': '/app/log'
'STORAGE_DIR': '/app/data'
'aidial.config.files': '["/opt/config/config.json"]'
'aidial.storage.overrides': '{ "jclouds.filesystem.basedir": "data" }'
'aidial.redis.singleServerConfig.address': 'redis://redis:6379'
depends_on:
- redis
volumes:
- ./settings:/opt/settings
- ${DIAL_DIR:-.}/core:/opt/config
- ${DIAL_DIR:-.}/core-logs/:/app/log
- ${DIAL_DIR:-.}/core-data/:/app/data
Core volume mounts
| Mount | Purpose |
|---|---|
./settings:/opt/settings | settings.json and gflog.xml |
./core:/opt/config | config.json |
./core-logs:/app/log | Log output directory |
./core-data:/app/data | Filesystem blob storage |
Redis server configuration
| Argument | Value | Description |
|---|---|---|
--maxmemory | 2000mb | Maximum memory Redis is allowed to use. Set slightly below the container memory limit. |
--maxmemory-policy | volatile-lfu | Eviction policy. Evicts the least-frequently-used keys among those with an expiration set. |
--save "" | (empty) | Disables RDB persistence. DIAL uses Redis as a cache, not a primary datastore. |
--appendonly no | — | Disables AOF persistence. |
--loglevel warning | — | Suppresses INFO and DEBUG log output. |
See Redis connection settings for DIAL Core's redis.* configuration in settings.json.
Available configurations
Echo application
dial-docker-compose/application/ — a minimal setup with a custom echo application.
include:
- path: ../common.yml
env_file: ./.env
services:
echo:
build: echo
The echo application is built from a local Dockerfile. Its config.json registers the app with DIAL Core. This is the simplest setup for verifying a DIAL deployment.
Azure OpenAI models
dial-docker-compose/model/ — two Azure OpenAI models via the OpenAI adapter.
include:
- path: ../common.yml
env_file: ./.env
services:
adapter-openai:
image: epam/ai-dial-adapter-openai:0.22.0
platform: linux/amd64
environment:
WEB_CONCURRENCY: "3"
Requires Azure OpenAI API keys in the config.json upstream entries. See Adapter configuration for adapter environment variables.
Note
This sample runs the standalone DIAL OpenAI Adapter, which will be deprecated. For your own deployments, use DIAL Model Provider, which serves the same adapter under
/compat/openai. To move a configuration, see Migrate from the standalone adapters.
Ollama (self-hosted)
dial-docker-compose/ollama/ — self-hosted chat, vision, and embedding models via Ollama.
The setup includes an Ollama container with GPU support and configures DIAL Core to route requests to Ollama's OpenAI-compatible endpoint. No adapter is needed — Ollama speaks the OpenAI protocol natively.
vLLM (self-hosted)
dial-docker-compose/vllm/ — self-hosted model via vLLM.
Similar to the Ollama setup but uses vLLM as the inference engine. Requires GPU access configured in the compose file.
Running a setup
cd dial-docker-compose/application
docker compose up
DIAL Chat is available at http://localhost:3000.
Further reading
- Advanced setup — production-like deployment with Keycloak, Admin Panel, and adapters
- .env reference — environment variable definitions
- DIAL Core configuration — understanding
settings.jsonandconfig.jsonused in each setup - DIAL Core settings: Redis — Redis connection, IAM authentication, and eviction