60 lines
2.3 KiB
Docker
60 lines
2.3 KiB
Docker
# Go implementation: Minimal image with ONNX Runtime
|
|
# Multi-stage build: build with Go + ONNX Runtime deps, runtime with minimal Debian
|
|
|
|
# Stage 1: Build Go binary
|
|
FROM golang:1.23-bookworm AS builder
|
|
WORKDIR /app
|
|
|
|
# Install build dependencies: git, g++, make, ca-certificates, curl, libc6-dev
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends git g++ make ca-certificates curl libc6-dev && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Configure git to avoid terminal prompt
|
|
ENV GIT_TERMINAL_PROMPT=0
|
|
|
|
# Copy Go files
|
|
COPY go.mod go.sum ./
|
|
COPY main.go .
|
|
|
|
# Download Go dependencies
|
|
RUN go mod download 2>&1
|
|
|
|
# Download ONNX Runtime shared library for Linux x64
|
|
RUN curl -sL -o /tmp/onnx.tgz https://github.com/microsoft/onnxruntime/releases/download/v1.27.0/onnxruntime-linux-x64-1.27.0.tgz
|
|
RUN tar -xzf /tmp/onnx.tgz -C /tmp
|
|
RUN mkdir -p /usr/local/lib && cp /tmp/onnxruntime-linux-x64-1.27.0/lib/libonnxruntime.so* /usr/local/lib/
|
|
RUN rm -rf /tmp/onnxruntime-linux-x64-1.27.0 /tmp/onnx.tgz
|
|
|
|
# Build Go binary with CGO enabled, baking in the git commit (provided by Coolify)
|
|
ARG SOURCE_COMMIT=dev
|
|
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
|
|
go build -ldflags "-X main.version=${SOURCE_COMMIT}" -o /app/vector-server main.go 2>&1
|
|
|
|
# Stage 2: Runtime
|
|
FROM debian:bookworm-slim
|
|
WORKDIR /app
|
|
|
|
# Install runtime dependencies: libstdc++, ca-certificates, curl
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends libstdc++6 ca-certificates curl && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Download model and tokenizer files
|
|
RUN curl -sL -o /app/model.onnx https://huggingface.co/onnx-community/all-MiniLM-L6-v2-ONNX/resolve/main/onnx/model.onnx && \
|
|
curl -sL -o /app/model.onnx_data https://huggingface.co/onnx-community/all-MiniLM-L6-v2-ONNX/resolve/main/onnx/model.onnx_data && \
|
|
curl -sL -o /app/tokenizer.json https://huggingface.co/onnx-community/all-MiniLM-L6-v2-ONNX/resolve/main/tokenizer.json && \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
|
|
|
# Copy binary and shared library from builder
|
|
COPY --from=builder /usr/local/lib/libonnxruntime.so* /usr/local/lib/
|
|
COPY --from=builder /app/vector-server .
|
|
|
|
# Set environment for ONNX Runtime
|
|
ENV LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
|
|
ENV ONNXRUNTIME_SHARED_LIBRARY_PATH=/usr/local/lib/libonnxruntime.so
|
|
|
|
EXPOSE 8080
|
|
ENV PORT=8080
|
|
CMD ["./vector-server"]
|