Bruin CLI Step 2 of 4

Build a local DuckLake lakehouse

1) Create docker-compose.yml

Create docker-compose.yml beside .bruin.yml:

services:
  # Stores DuckLake metadata.
  catalog:
    image: postgres:16
    environment:
      POSTGRES_USER: lakehouse
      POSTGRES_PASSWORD: lakehouse
      POSTGRES_DB: ducklake_meta
    ports:
      - "5434:5432"
    volumes:
      - catalog-data:/var/lib/postgresql/data

  # Stores Parquet data and exposes an S3-compatible API.
  storage:
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    ports:
      - "9010:9000"
      - "9011:9001"
    volumes:
      - storage-data:/data

  # Creates the DuckLake bucket once, then exits.
  create-bucket:
    image: minio/mc:latest
    depends_on:
      - storage
    entrypoint: >
      /bin/sh -c "
      until (mc alias set local http://storage:9000 minioadmin minioadmin) do echo 'waiting for minio...' && sleep 1; done;
      mc mb --ignore-existing local/ducklake;
      echo 'bucket ready';
      "

volumes:
  catalog-data:
  storage-data:

Sign up to our newsletter

Practical updates on open-source data pipelines, AI analysts, governance, and what we are shipping at Bruin.