Files
ChuSQL/Dockerfile
T

66 lines
3.4 KiB
Docker
Raw Normal View History

2026-10-16 23:46:04 +08:00
# syntax=docker/dockerfile:1
# 分阶段构建存储和四个程序,运行镜像不包含编译器。
ARG DEBIAN_MIRROR=http://mirrors.tencentyun.com
ARG BASE_REGISTRY=docker.io
FROM ${BASE_REGISTRY}/library/rust:1-bookworm@sha256:e12566d5abc17a0da741628782cdb504b68b8961f5bfcf677936bf3e8b32de29 AS storage
ARG CARGO_REGISTRY=sparse+https://rsproxy.cn/index/
ENV CARGO_BUILD_JOBS=1 CARGO_HTTP_TIMEOUT=30
WORKDIR /build/chusql-core/storage
COPY chusql-core/storage/Cargo.toml chusql-core/storage/Cargo.lock ./
COPY chusql-core/storage/src ./src
RUN --mount=type=cache,target=/usr/local/cargo/registry \
cargo --config 'source.crates-io.replace-with="build-mirror"' \
--config "source.build-mirror.registry=\"${CARGO_REGISTRY}\"" \
build --release --locked --jobs 1
FROM ${BASE_REGISTRY}/library/haskell:9.10.3-slim-bookworm@sha256:4f1f62fec9cea4cbb03e885c9ad45642609cadd3897b1e64a7f61d0862b575b1 AS haskell
ARG DEBIAN_MIRROR
RUN sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/debian.sources \
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 update \
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 install -y --no-install-recommends libgmp-dev zlib1g-dev \
&& rm -rf /var/lib/apt/lists/*
ENV LD_LIBRARY_PATH=/build/chusql-core/storage/target/release \
GHCRTS=-M1536m
WORKDIR /build
COPY --from=storage /build/chusql-core/storage/target/release/libchusql_core_storage.so ./chusql-core/storage/target/release/
COPY chusql-core/model ./chusql-core/model
COPY chusql-core/engine ./chusql-core/engine
COPY chusql-interface ./chusql-interface
COPY chusql-bootstrap ./chusql-bootstrap
COPY chusql-server ./chusql-server
COPY chusql-web ./chusql-web
COPY chusql-cli ./chusql-cli
RUN --mount=type=cache,target=/root/.stack \
stack --stack-yaml chusql-cli/stack.yaml --system-ghc --no-install-ghc \
build --fast --jobs 1 --ghc-options=-j1 --copy-bins --local-bin-path /out/bin \
chusql-server:exe:chusql-server chusql-bootstrap:exe:csql-bootstrap \
chusql-web:exe:chusql-web chusql-cli:exe:csql
FROM ${BASE_REGISTRY}/library/debian:bookworm-slim@sha256:7c7b2c966bc9ee8cedfeef67e0e279108992c77681fa595db4a9d65c06ccc587 AS runtime
ARG DEBIAN_MIRROR
RUN sed -i "s|http://deb.debian.org|${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/debian.sources \
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 update \
&& apt-get -o Acquire::Retries=2 -o Acquire::http::Timeout=30 install -y --no-install-recommends \
ca-certificates libgmp10 libnuma1 libffi8 libtinfo6 zlib1g curl netcat-openbsd \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd --gid 10001 chusql \
&& useradd --uid 10001 --gid chusql --create-home chusql \
&& install -d -o chusql -g chusql /var/lib/chusql /var/log/chusql /opt/chusql/resources
WORKDIR /opt/chusql
COPY --from=haskell /out/bin/ ./bin/
COPY --from=storage /build/chusql-core/storage/target/release/libchusql_core_storage.so ./bin/
COPY chusql-web/static ./static
COPY docker/server.toml docker/web.toml /etc/chusql/
COPY --chmod=755 docker/entrypoint.sh docker/healthcheck.sh /usr/local/bin/
ENV PATH=/opt/chusql/bin:${PATH} \
LD_LIBRARY_PATH=/opt/chusql/bin \
LANG=C.UTF-8 \
CHUSQL_ADMIN_USER=root
USER 10001:10001
EXPOSE 7777 7778
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=5 \
CMD ["healthcheck.sh", "server"]
ENTRYPOINT ["entrypoint.sh"]
CMD ["server"]