mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 01:30:33 +00:00
This commit introduces two key enhancements: the integration of Grafana Tempo for distributed tracing and the implementation of a dual-stack TCP listener for improved network compatibility. - **Observability**: - Adds the `tempo` service to the `docker-compose.yml` observability stack. - Tempo is configured to collect and store traces, integrating with the existing OpenTelemetry setup. - A custom `tempo-entrypoint.sh` script is included to manage volume permissions on startup. - **Networking**: - Modifies `http.rs` to support dual-stack (IPv4/IPv6) connections on a single socket. - By setting the `IPV6_V6ONLY` socket option to `false`, the server can now accept both IPv6 and IPv4-mapped IPv6 traffic, enhancing cross-platform support.
RustFS Docker Images
This directory contains organized Dockerfile configurations for building RustFS container images across multiple platforms and system versions.
📁 Directory Structure
.docker/
├── alpine/ # Alpine Linux variants
│ ├── Dockerfile.prebuild # Alpine + pre-built binaries
│ └── Dockerfile.source # Alpine + source compilation
├── ubuntu/ # Ubuntu variants
│ ├── Dockerfile.prebuild # Ubuntu + pre-built binaries
│ ├── Dockerfile.source # Ubuntu + source compilation
│ └── Dockerfile.dev # Ubuntu + development environment
└── cargo.config.toml # Rust cargo configuration
🎯 Image Variants
Production Images
| Variant | Base OS | Build Method | Size | Use Case |
|---|---|---|---|---|
production (default) |
Alpine 3.18 | Pre-built | Smallest | Production deployment |
alpine |
Alpine 3.18 | Pre-built | Small | Explicit Alpine choice |
alpine-source |
Alpine 3.18 | Source build | Small | Custom Alpine builds |
ubuntu |
Ubuntu 22.04 | Pre-built | Medium | Ubuntu environments |
ubuntu-source |
Ubuntu 22.04 | Source build | Medium | Full Ubuntu compatibility |
Development Images
| Variant | Base OS | Features | Use Case |
|---|---|---|---|
ubuntu-dev |
Ubuntu 22.04 | Full toolchain + dev tools | Interactive development |
🚀 Usage Examples
Quick Start (Production)
# Default production image (Alpine + pre-built)
docker run -p 9000:9000 rustfs/rustfs:latest
# Specific version with production variant
docker run -p 9000:9000 rustfs/rustfs:1.2.3-production
# Explicit Alpine variant
docker run -p 9000:9000 rustfs/rustfs:latest-alpine
# Ubuntu-based production
docker run -p 9000:9000 rustfs/rustfs:latest-ubuntu
Complete Tag Strategy Examples
# Stable Releases
docker run rustfs/rustfs:1.2.3 # Main version (production)
docker run rustfs/rustfs:1.2.3-production # Explicit production variant
docker run rustfs/rustfs:1.2.3-alpine # Explicit Alpine variant
docker run rustfs/rustfs:1.2.3-alpine-source # Alpine source build
docker run rustfs/rustfs:latest # Latest stable
# Prerelease Versions
docker run rustfs/rustfs:1.3.0-alpha.2 # Specific alpha version
docker run rustfs/rustfs:1.3.0-alpha.2-alpine # Alpha with Alpine
docker run rustfs/rustfs:alpha # Latest alpha
docker run rustfs/rustfs:beta # Latest beta
docker run rustfs/rustfs:rc # Latest release candidate
# Development Versions
docker run rustfs/rustfs:dev # Latest development
docker run rustfs/rustfs:dev-13e4a0b # Specific commit
docker run rustfs/rustfs:dev-alpine # Development Alpine
Development Environment
# Start development container
docker run -it -v $(pwd):/app -p 9000:9000 rustfs/rustfs:latest-ubuntu-dev
# Inside container:
cd /app
cargo build --release
cargo run
🏗️ Build Arguments
All images support dynamic version selection:
# Build with specific version
docker build \
--build-arg VERSION="1.0.0" \
--build-arg BUILD_TYPE="release" \
-f .docker/alpine/Dockerfile.prebuild \
-t rustfs:1.0.0-alpine .
🌐 Multi-Platform Support
All images support multiple architectures:
linux/amd64(Intel/AMD 64-bit)linux/arm64(ARM 64-bit, Apple Silicon, etc.)
⚡ Build Speed Optimizations
Docker Build Optimizations
- Multi-layer caching: GitHub Actions cache + Registry cache
- Parallel matrix builds: All 5 variants build simultaneously
- Multi-platform builds: amd64/arm64 built in parallel
- BuildKit features: Advanced caching and inline cache
Rust Compilation Optimizations
- sccache: Distributed compilation cache for Rust builds
- Parallel compilation: Uses all available CPU cores (
-j $(nproc)) - Optimized cargo config: Sparse registry protocol, fast linker (lld)
- Dependency caching: Separate Docker layers for dependencies vs. source code
- Release optimizations: LTO, strip symbols, optimized codegen
Cache Strategy
# GitHub Actions cache
cache-from: type=gha,scope=docker-{variant}
cache-to: type=gha,mode=max,scope=docker-{variant}
# Registry cache (persistent across runs)
cache-from: type=registry,ref=ghcr.io/rustfs/rustfs:buildcache-{variant}
cache-to: type=registry,ref=ghcr.io/rustfs/rustfs:buildcache-{variant}
Build Performance Comparison
| Build Type | Time (Est.) | Cache Hit | Cache Miss |
|---|---|---|---|
| Production (Alpine pre-built) | ~2-3 min | ~1 min | ~2 min |
| Alpine pre-built | ~2-3 min | ~1 min | ~2 min |
| Alpine source | ~8-12 min | ~3-5 min | ~10 min |
| Ubuntu pre-built | ~3-4 min | ~1-2 min | ~3 min |
| Ubuntu source | ~10-15 min | ~4-6 min | ~12 min |
📋 Build Matrix
| Trigger | Version Format | Download Path | Image Tags |
|---|---|---|---|
push main |
dev-{sha} |
artifacts/rustfs/dev/ |
dev-{sha}-{variant}, dev-{variant}, dev |
push 1.2.3 |
1.2.3 |
artifacts/rustfs/release/ |
1.2.3-{variant}, 1.2.3, latest-{variant}, latest |
push 1.3.0-alpha.2 |
1.3.0-alpha.2 |
artifacts/rustfs/release/ |
1.3.0-alpha.2-{variant}, alpha-{variant}, alpha |
push 1.3.0-beta.1 |
1.3.0-beta.1 |
artifacts/rustfs/release/ |
1.3.0-beta.1-{variant}, beta-{variant}, beta |
push 1.3.0-rc.1 |
1.3.0-rc.1 |
artifacts/rustfs/release/ |
1.3.0-rc.1-{variant}, rc-{variant}, rc |