Skip to main content

Docker Containers

This guide explains how to use existing Docker containers and create custom ones for your Bacalhau workloads.

Prerequisites

  1. Install the Bacalhau client
  2. Docker (for both building custom containers and running on compute nodes)

Understanding Docker Workloads in Bacalhau

Bacalhau uses a syntax that closely resembles Docker, allowing you to utilize the same containers.

Example: Docker Command

docker run alpine echo "Hello from Docker"

Equivalent Bacalhau Command

bacalhau docker run alpine echo "Hello from Bacalhau"

Getting Job Results

# View job logs
bacalhau job logs JOB_ID

# Get detailed job information
bacalhau job describe JOB_ID
Requirements for Docker Containers

Containers must be published to a registry that is accessible to your Bacalhau nodes

Creating a Custom Container

Let's walk through creating a simple custom Docker container for Bacalhau.

Step 1: Create Your Container Files

Create a simple Dockerfile:

FROM alpine:latest
RUN echo '#!/bin/sh\necho "Hello from $1"' > /usr/local/bin/greet && \
chmod +x /usr/local/bin/greet

Step 2: Build and Test Your Container Locally

Build your Docker image:

docker build -t your-registry/simple-greeter:latest .

Test it locally:

docker run --rm your-registry/simple-greeter:latest sh -c 'greet "Local Test"'

Step 3: Push Your Container to a Registry

# For multi-architecture support (recommended)
docker buildx build --platform linux/amd64,linux/arm64 --push -t your-registry/simple-greeter:latest .

# For single architecture
docker push your-registry/simple-greeter:latest

Running Your Custom Container on Bacalhau

Run your container on Bacalhau:

bacalhau docker run your-registry/simple-greeter:latest \
sh -c 'greet "Bacalhau"'

View your job logs:

bacalhau job logs JOB_ID