2025-09-03 10:14:41 -04:00
|
|
|
# syntax=docker/dockerfile:1.4
|
2025-09-26 23:44:38 -05:00
|
|
|
# goose CLI and Server Docker Image
|
2025-09-03 10:14:41 -04:00
|
|
|
# Multi-stage build for minimal final image size
|
|
|
|
|
|
|
|
|
|
# Build stage
|
|
|
|
|
FROM rust:1.82-bookworm AS builder
|
|
|
|
|
|
|
|
|
|
# Install build dependencies
|
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
apt-get install -y --no-install-recommends \
|
|
|
|
|
build-essential \
|
2026-02-27 19:51:11 -05:00
|
|
|
cmake \
|
2025-09-03 10:14:41 -04:00
|
|
|
pkg-config \
|
|
|
|
|
libssl-dev \
|
|
|
|
|
libdbus-1-dev \
|
2026-02-27 19:51:11 -05:00
|
|
|
libclang-dev \
|
2025-09-03 10:14:41 -04:00
|
|
|
protobuf-compiler \
|
|
|
|
|
libprotobuf-dev \
|
|
|
|
|
ca-certificates \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Create app directory
|
|
|
|
|
WORKDIR /build
|
|
|
|
|
|
|
|
|
|
# Copy source code
|
|
|
|
|
COPY . .
|
|
|
|
|
|
|
|
|
|
# Build release binaries with optimizations
|
|
|
|
|
ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
|
|
|
|
|
ENV CARGO_PROFILE_RELEASE_LTO=true
|
|
|
|
|
ENV CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
|
|
|
|
|
ENV CARGO_PROFILE_RELEASE_OPT_LEVEL=z
|
|
|
|
|
ENV CARGO_PROFILE_RELEASE_STRIP=true
|
|
|
|
|
RUN cargo build --release --package goose-cli
|
|
|
|
|
|
|
|
|
|
# Runtime stage - minimal Debian
|
|
|
|
|
FROM debian:bookworm-slim@sha256:b1a741487078b369e78119849663d7f1a5341ef2768798f7b7406c4240f86aef
|
|
|
|
|
|
|
|
|
|
# Install only runtime dependencies
|
|
|
|
|
RUN apt-get update && \
|
|
|
|
|
apt-get install -y --no-install-recommends \
|
|
|
|
|
ca-certificates \
|
|
|
|
|
libssl3 \
|
|
|
|
|
libdbus-1-3 \
|
2026-02-27 19:51:11 -05:00
|
|
|
libgomp1 \
|
2025-09-03 10:14:41 -04:00
|
|
|
libxcb1 \
|
|
|
|
|
curl \
|
|
|
|
|
git \
|
|
|
|
|
&& apt-get clean \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Copy binary from builder
|
|
|
|
|
COPY --from=builder /build/target/release/goose /usr/local/bin/goose
|
|
|
|
|
|
|
|
|
|
# Create non-root user
|
|
|
|
|
RUN useradd -m -u 1000 -s /bin/bash goose && \
|
|
|
|
|
mkdir -p /home/goose/.config/goose && \
|
|
|
|
|
chown -R goose:goose /home/goose
|
|
|
|
|
|
|
|
|
|
# Set up environment
|
|
|
|
|
ENV PATH="/usr/local/bin:${PATH}"
|
|
|
|
|
ENV HOME="/home/goose"
|
|
|
|
|
|
|
|
|
|
# Switch to non-root user
|
|
|
|
|
USER goose
|
|
|
|
|
WORKDIR /home/goose
|
|
|
|
|
|
|
|
|
|
# Default to goose CLI
|
|
|
|
|
ENTRYPOINT ["/usr/local/bin/goose"]
|
|
|
|
|
CMD ["--help"]
|
|
|
|
|
|
|
|
|
|
# Labels for metadata
|
2025-09-26 23:44:38 -05:00
|
|
|
LABEL org.opencontainers.image.title="goose"
|
|
|
|
|
LABEL org.opencontainers.image.description="goose CLI"
|
2025-09-03 10:14:41 -04:00
|
|
|
LABEL org.opencontainers.image.vendor="Block"
|
|
|
|
|
LABEL org.opencontainers.image.source="https://github.com/block/goose"
|