burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
7d5289a verified

OpenEnv Base Image

Standard base image for all OpenEnv environment servers.

What's Included

Layer Size Contents
python:3.11-slim 200 MB Base Python runtime
+ Dependencies 100 MB FastAPI, uvicorn, requests
Total ~300 MB Ready for environment servers

Image Sizes

openenv-base:latest   300 MB  (python + fastapi + uvicorn)

echo-env:latest 500 MB (python + fastapi + uvicorn + app) coding-env:latest 520 MB (python + fastapi + uvicorn + app + tools) another-env:latest 510 MB (python + fastapi + uvicorn + app)

Total: 1.5 GB (with lots of duplication)


### With Base Images (✅ Solution)

openenv-base:latest 300 MB (python + fastapi + uvicorn) echo-env:latest 50 MB (app only, uses base) coding-env:latest 70 MB (app + tools, uses base) another-env:latest 45 MB (app only, uses base)

Total: 465 MB (base shared, minimal duplication)


## Building the Base Image

```bash
# From project root
docker build -t openenv-base:latest -f src/core/containers/images/Dockerfile .

Usage in Environment Dockerfiles

Each environment Dockerfile should start with:

FROM openenv-base:latest

# Copy only environment-specific files
COPY src/core/ /app/src/core/
COPY src/envs/my_env/ /app/src/envs/my_env/

# Run the server
CMD ["uvicorn", "envs.my_env.server.app:app", "--host", "0.0.0.0", "--port", "8000"]

Base Image Contents

  • Python 3.11-slim
  • FastAPI >= 0.104.0
  • Uvicorn >= 0.24.0
  • Requests >= 2.25.0
  • curl (for health checks)

Example: Building Echo Environment

# Step 1: Build base image (do this once)
docker build -t openenv-base:latest -f src/core/containers/images/Dockerfile .

# Step 2: Build echo environment (uses base)
docker build -t echo-env:latest -f src/envs/echo_env/server/Dockerfile .

# Step 3: Run echo environment
docker run -p 8000:8000 echo-env:latest

Updating the Base

When dependencies need updating:

  1. Update src/core/containers/images/Dockerfile
  2. Rebuild base image
  3. Rebuild all environment images (they'll use new base)
# Update base
docker build -t openenv-base:latest -f src/core/containers/images/Dockerfile .

# Rebuild environments (they automatically use new base)
docker build -t echo-env:latest -f src/envs/echo_env/server/Dockerfile .