yams/Dockerfile
2025-09-04 09:32:39 -04:00

58 lines
2.4 KiB
Docker
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# syntax=docker/dockerfile:1.7-labs
FROM ubuntu:22.04 AS builder
ARG YAMS_VERSION=dev
ARG GIT_COMMIT=""
ARG GIT_TAG=""
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential git curl pkg-config ca-certificates \
libssl-dev libsqlite3-dev protobuf-compiler libprotobuf-dev \
libncurses-dev libcurl4-openssl-dev \
python3 python3-venv python3-pip \
gcc g++ ninja-build openssl lld llvm clang \
&& rm -rf /var/lib/apt/lists/*
RUN python3 -m venv /opt/venv \
&& /opt/venv/bin/pip install --upgrade pip \
&& /opt/venv/bin/pip install "conan==2.3.*" "cmake==3.27.*" "ninja==1.11.*"
ENV PATH="/opt/venv/bin:${PATH}"
WORKDIR /src
# 1) Copy only dependency graph inputs (keeps conan install cacheable)
COPY conanfile.py conanfile.txt* CMakeLists.txt CMakePresets.json* ./
COPY conan/ ./conan/
# Optional but recommended if you maintain it:
# COPY conan.lock ./
# 2) Create/update profile once (stable layer)
RUN --mount=type=cache,target=/root/.conan2 \
conan profile detect --force && \
sed -i 's/compiler.cppstd=.*/compiler.cppstd=20/' /root/.conan2/profiles/default && \
conan profile show && \
conan install . --output-folder=build/yams-release -s build_type=Release --build=missing
# 3) Now copy the rest of the source (this won’t invalidate the conan install layer)
COPY . .
RUN --mount=type=cache,target=/root/.conan2 cmake --preset yams-release -DYAMS_BUILD_DOCS=OFF
RUN --mount=type=cache,target=/root/.conan2 cmake --build --preset yams-release
RUN --mount=type=cache,target=/root/.conan2 cmake --install build/yams-release --prefix /opt/yams
FROM debian:trixie-slim AS runtime
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/*
RUN groupadd -r yams && useradd -r -g yams -s /bin/false yams
COPY --from=builder /opt/yams/bin/yams /usr/local/bin/yams
COPY --from=builder /src/data/magic_numbers.json /usr/local/share/yams/data
RUN mkdir -p /home/yams/.local/share/yams /home/yams/.config/yams && chown -R yams:yams /home/yams
USER yams
WORKDIR /home/yams
ENV YAMS_STORAGE="/home/yams/.local/share/yams" \
XDG_DATA_HOME="/home/yams/.local/share" \
XDG_CONFIG_HOME="/home/yams/.config"
LABEL org.opencontainers.image.description="YAMS MCP server (stdio only). Run 'yams serve'."
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD yams --version || exit 1
ENTRYPOINT ["yams"]
CMD ["--help"]