MinIO in Docker

Running MinIO in Docker on This Host

With no community images left, you build your own: clone the last release tag, make build, and copy the Go binaries into a slim image whose six-line Dockerfile (in demos/ch08/minio/) starts FROM debian:trixie-slim, copies minio and mc to /usr/local/bin, and sets CMD ["server", "/data/disk{1...4}", "--console-address", ":9001"].

build.sh: clone, compile and package the last AGPLv3 releaseShell
# Build the last AGPLv3 MinIO release and its mc client from source (needs Go 1.24+, Docker).
clone() {   # retried: this host's network drops TLS sessions now and then
  for i in $(seq 10); do
    git -c advice.detachedHead=false clone -q --depth 1 --branch "$@" && return; sleep 5; done; }
clone RELEASE.2025-10-15T17-29-55Z https://github.com/minio/minio.git
clone RELEASE.2025-08-13T08-35-41Z https://github.com/minio/mc.git
(cd minio && MINIO_RELEASE=RELEASE make build >/dev/null 2>&1; ./minio --version | head -1)
(cd mc && MC_RELEASE=RELEASE make build >/dev/null 2>&1; ./mc --version | head -1)
mkdir -p image && cp minio/minio mc/mc Dockerfile image/
docker build -q -t l1/minio:RELEASE.2025-10-15T17-29-55Z image >/dev/null
docker images l1/minio --format '{{.Repository}}:{{.Tag}}  {{.Size}}'
Output
...
minio version RELEASE.2025-10-15T17-29-55Z (commit-id=9e49d5e7a648f00e26f2246f4dc28e6b07f8c84a)
mc version RELEASE.2025-08-13T08-35-41Z (commit-id=7394ce0dd2a80935aded936b09fa12cbb3cb8096)
l1/minio:RELEASE.2025-10-15T17-29-55Z  311MB

The compile takes about two minutes with Go 1.26.0; MINIO_RELEASE=RELEASE stamps the release name in. The CMD's /data/disk{1...4} is MinIO 30,943 's own expansion, giving one container a four-drive erasure set. Start it on the l1-lake network that the catalog and Trino 403,499 join later:

run_minio.sh: start l1-minio and register it with mcShell
# Start MinIO: four drives in one erasure set, S3 API on port 31900, console on 31901.
docker network create l1-lake >/dev/null 2>&1
docker run -d --name l1-minio --network l1-lake -p 31900:9000 -p 31901:9001 \
  -e MINIO_ROOT_USER=booknest-admin -e MINIO_ROOT_PASSWORD=booknest-secret-2026 \
  -v l1-minio-data:/data l1/minio:RELEASE.2025-10-15T17-29-55Z | cut -c1-12
until curl -sf localhost:31900/minio/health/live; do sleep 1; done
mc alias set lake http://localhost:31900 booknest-admin booknest-secret-2026
mc ready lake
Output
1518ab6bf1c6
Added `lake` successfully.
The cluster 'lake' is ready

The server idles at about 62 MiB; its root credentials suit a local sandbox only (Security and Lakehouse Costs).