Refine high-quality datasets and visual AI models
docker pull voxel51/fiftyone:latest
docker run -d --name fiftyone -p 5151:5151 --restart always voxel51/fiftyone:latest
podman run -d --name fiftyone -p 5151:5151 --restart always voxel51/fiftyone:latest
skopeo inspect docker://docker.io/voxel51/fiftyone:latest
oras pull voxel51/fiftyone:latest
# Copyright 2017-2026, Voxel51, Inc.
# voxel51.com
#
# Dockerfile for building a FiftyOne image atop a Python base image as defined
# by the PYTHON_VERSION build-arg
#
# ARGs::
#
# BUILD_TYPE (source): Allows source or released artifact builds without
# editing the Dockerfile [`source` or `released`]
# FO_VERSION [`released` builds only]: This is the fiftyone version to use for
# `released` builds
# PIP_INDEX_URL (https://pypi.org/simple): Allow the use of caching proxies
# PYTHON_VERSION (3.11): The Python base image to use
# ROOT_DIR (/fiftyone): The name of the directory within the container that
# should be mounted when running
#
# Targets::
# interactive (default): This builds a docker image that runs `ipython`
# server: This builds a docker image that launches fiftyone on port 5151
#
# Example usage::
#
# # Build interactive image from source
# make docker
#
# # Build interactive image from released artifact
# docker build -t local/fiftyone \
# --build-arg BUILD_TYPE=released \
# --build-arg FO_VERSION=1.3.0 .
#
# # Build server image from source artifact
# make python
# docker build -t local/fiftyone --target server .
#
# # Run
# SHARED_DIR=/path/to/shared/dir
# docker run \
# -v ${SHARED_DIR}:/fiftyone \
# -p 5151:5151 \
# -it local/fiftyone
#
# The type of build to run
ARG BUILD_TYPE=source
# The base python image to build from
ARG PYTHON_VERSION=3.11
# Collect wheels for future installation
FROM python:${PYTHON_VERSION} AS source
ARG PIP_INDEX_URL=https://pypi.org/simple
# default: use local wheel
#
COPY dist dist
RUN pip --no-cache-dir install -q -U pip setuptools wheel \
&& pip wheel --wheel-dir=/wheels \
dist/*.whl \
ipython
FROM python:${PYTHON_VERSION} AS released
ARG PIP_INDEX_URL=https://pypi.org/simple
# server: use published pypi package
#
ARG FO_VERSION
ENV FO_VERSION=${FO_VERSION}
RUN pip --no-cache-dir install -q -U pip setuptools wheel \
&& pip wheel --wheel-dir=/wheels \
fiftyone==${FO_VERSION} \
ipython
#
# Other packages you might want to add to the list above:
# torch torchvision: Torch model training/zoo datasets
# tensorflow tensorflow-datasets: TF model training/zoo datasets
# pycocotools: COCO-style evaluation
# notebook>=5.3 ipywidgets>=7.5: Jupyter notebooks
# flash>=0.4: Lightning Flash integration
# apache_beam: Apache Beam integration
# labelbox: Labelbox integration
# shapely: Polyline evaluation
# rasterio: GeoTIFF images
# pydicom: DICOM images
#
FROM ${BUILD_TYPE} AS builder
# This is an empty target because you can't use a variable in `RUN --mount`
# Create a smaller image with wheels installed
FROM python:${PYTHON_VERSION}-slim AS shared
ARG PIP_INDEX_URL=https://pypi.org/simple
# The name of the shared directory in the container that should be
# volume-mounted by users to persist data loaded into FiftyOne
ARG ROOT_DIR=/fiftyone
WORKDIR /opt
ENV FIFTYONE_DATABASE_DIR=${ROOT_DIR}/db \
FIFTYONE_DEFAULT_APP_ADDRESS='0.0.0.0' \
FIFTYONE_DEFAULT_DATASET_DIR=${ROOT_DIR}/default \
FIFTYONE_DATASET_ZOO_DIR=${ROOT_DIR}/zoo/datasets \
FIFTYONE_MODEL_ZOO_DIR=${ROOT_DIR}/zoo/models \
VIRTUAL_ENV=/opt/.fiftyone-venv
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
# Update the base image and install ffmpeg
RUN apt-get -qq -y update && apt-get -qq -y upgrade \
&& apt-get -qq install -y --no-install-recommends ffmpeg libcurl4 php-curl \
&& apt clean && rm -rf /var/lib/apt/lists/* \
# upgrade the base image pip, setuptools, and wheel
# addresses CVE-2022-40897
&& /usr/local/bin/pip --no-cache-dir install -q -U pip setuptools wheel
# Create Virtual Env
RUN python -m venv "${VIRTUAL_ENV}" \
# address CVE-2024-6345 by removing ensurepip metadata
&& rm -rf /usr/local/lib/python*/ensurepip
# Install wheels from builder stage
RUN --mount=type=cache,from=builder,target=/builder,ro \
pip --no-cache-dir install -q -U pip setuptools wheel \
&& pip --no-cache-dir install -q --pre --no-index \
--find-links=/builder/wheels \
/builder/wheels/*
FROM shared AS server
#
# server: Launch the App
#
EXPOSE 5151
CMD [ \
"python", \
"-m", \
"fiftyone.server.main", \
"--port", \
"5151" \
]
FROM shared AS interactive
#
# default: interactive, behavior
#
CMD [ "ipython" ]