This document describes the Docker images built and published by the Feast project. It covers the different image types, their build process, publishing workflows, and how they are used in production deployments. For information about deploying these images using Helm charts, see Helm Charts. For Kubernetes Operator deployment patterns, see Kubernetes Operator.
Feast builds and publishes multiple Docker images to support different deployment scenarios and language runtimes. All production images are published to the quay.io/feastdev registry, while CI builds are published to quay.io/feastdev-ci. The images support multi-architecture builds (linux/amd64 and linux/arm64) and are built using Docker BuildKit.
Feast maintains five primary Docker images, each serving a specific purpose in the architecture:
| Image Name | Purpose | Base Language | Dockerfile Location |
|---|---|---|---|
feature-server | Python-based HTTP/gRPC feature serving | Python | sdk/python/feast/infra/feature_servers/multicloud/Dockerfile |
feature-transformation-server | Java-based transformation service | Java | sdk/python/feast/infra/transformation_servers/Dockerfile |
feature-server-java | Java-based feature server (legacy) | Java | java/infra/docker/feature-server/Dockerfile |
feast-operator | Kubernetes operator for GitOps deployments | Go | infra/feast-operator/Dockerfile |
go-feature-server | High-performance Go feature server | Go | go/infra/docker/feature-server/Dockerfile |
Sources: Makefile600-646
The primary feature server implementation built on FastAPI and uvicorn. It provides HTTP and gRPC endpoints for online feature retrieval and supports all Feast online stores.
Build Target: build-feature-server-docker
Key Characteristics:
/get-online-features endpointSources: Makefile608-612
A Java-based service that handles on-demand feature transformations using the Java transformation engine. This server is deployed alongside the Python feature server when Java-based transformations are required.
Build Target: build-feature-transformation-server-docker
Build Process:
1. Maven build creates Java artifacts
2. Docker build copies artifacts and sets up JVM environment
3. Image tagged with VERSION argument
Sources: Makefile617-620
A Kubernetes operator that manages Feast deployments declaratively using Custom Resource Definitions (CRDs). It watches FeatureStore CRD resources and reconciles desired state.
Build Target: build-feast-operator-docker
Build Process: The operator build delegates to the operator's own Makefile:
cd infra/feast-operator && \
IMAGE_TAG_BASE=$(REGISTRY)/feast-operator \
VERSION=$(VERSION) \
$(MAKE) docker-build
Sources: Makefile636-640
A high-performance alternative to the Python feature server, optimized for low-latency serving. Supports a subset of online stores with native Go implementations.
Build Target: build-go-feature-server-docker
Requirements:
make compile-protos-goSources: Makefile642-646
Sources: Makefile600-646
The Docker images are built using docker buildx with multi-architecture support. All builds use the --load flag for local development or omit it for CI/CD pipelines that push directly to registries.
All image builds accept the following parameters:
| Parameter | Description | Default | Example |
|---|---|---|---|
REGISTRY | Docker registry prefix | N/A | quay.io/feastdev |
VERSION | Image version tag | N/A | v0.38.0 or ${GITHUB_SHA} |
Feature Server:
Feature Transformation Server:
Java Feature Server:
Sources: Makefile608-628
Sources: .github/workflows/master_only.yml87-131 .github/workflows/build_wheels.yml69-108
On every push to the master branch, all Docker images are built and published to the CI registry:
master branchquay.io/feastdev-ci${GITHUB_SHA} - Unique commit hashdevelop - Latest development buildSources: .github/workflows/master_only.yml87-131
On tagged releases (matching v*.*.*), images are built and published to the production registry:
v*.*.* or manual workflow dispatchquay.io/feastdevVERSION_WITHOUT_PREFIX (e.g., 0.38.0)latest (for stable releases)Sources: .github/workflows/build_wheels.yml69-108 .github/workflows/publish.yml48-54
The verify-python-wheels job validates Docker images before publishing:
Verification Steps:
feast version output matches expected versionSources: .github/workflows/build_wheels.yml109-196
Feast provides specialized development images for local testing and iteration:
| Target | Image Tag | Purpose |
|---|---|---|
build-feature-server-dev | feastdev/feature-server:dev | Local Python server development |
build-feature-server-dev-docker | $(REGISTRY)/feature-server:$(VERSION) | CI-built dev server |
build-java-docker-dev | feastdev/feature-transformation-server:dev | Local Java transformation service |
build-go-docker-dev | feastdev/feature-server-go:dev | Local Go server development |
Development images use alternative Dockerfiles optimized for faster iteration:
sdk/python/feast/infra/feature_servers/multicloud/Dockerfile.devjava/infra/docker/feature-server/Dockerfile.devThese dev Dockerfiles typically:
Sources: Makefile651-678
Sources: Makefile653-678
All production Docker images support multiple architectures using Docker BuildKit and QEMU:
Supported Architectures:
linux/amd64 - Standard x86_64 architecturelinux/arm64 - ARM64/aarch64 architecture (Apple Silicon, ARM servers)Platform-Specific Considerations:
For macOS (especially Apple Silicon), some builds require explicit platform specification:
Sources: .github/workflows/master_only.yml107-111 Makefile663-666
quay.io/feastdev-ciQUAYIO_CI_USERNAME and QUAYIO_CI_TOKEN secretsdevelopquay.io/feastdevQUAYIO_USERNAME and QUAYIO_PASSWORD secretslatest tagSources: .github/workflows/master_only.yml94-118
Docker image versions are synchronized with the Feast release version:
Version Extraction Process:
.github/actions/get-semantic-release-version action extracts versionrelease_version: Full version with prefix (e.g., v0.38.0)version_without_prefix: Numeric version (e.g., 0.38.0)version_without_prefixSources: .github/workflows/build_wheels.yml48-105 .releaserc.js1-150
The Python feature server image includes dependencies from:
pip install feast[extra]While Feast currently publishes full-featured images, the dependency system supports minimal builds:
| Dependency Set | File | Purpose |
|---|---|---|
| Base | py3.11-requirements.txt | Core Feast functionality |
| Minimal | py3.11-minimal-requirements.txt | Minimal production deployment |
| Minimal (sdist) | py3.11-minimal-sdist-requirements.txt | Source distribution builds |
| CI | py3.11-ci-requirements.txt | Testing and development |
Sources: sdk/python/requirements/py3.11-requirements.txt1-100 sdk/python/requirements/py3.11-minimal-requirements.txt1-100 setup.py279-292
CI builds use the jlumbroso/free-disk-space action to free up space on GitHub runners before building large images:
This removes unnecessary build tools and packages, freeing ~14GB of space.
Sources: .github/workflows/master_only.yml97-106
Docker BuildKit automatically caches layers, but the build process also:
Sources: .github/workflows/build_wheels.yml31-66
The built Docker images are consumed by:
docker run or in container orchestration platformsExample Docker run command:
Sources: Makefile608-612
Refresh this wiki
This wiki was recently refreshed. Please wait 1 day to refresh again.