# zinit test container
FROM rust:1-alpine AS builder
RUN apk add --no-cache musl-dev
WORKDIR /build
COPY . .
RUN cargo build --release --workspace
# Runtime image
FROM alpine:3.21
RUN apk add --no-cache \
caddy \
openssh-server \
&& mkdir -p /etc/zinit/services \
&& mkdir -p /var/run \
&& mkdir -p /root/.ssh \
&& chmod 700 /root/.ssh \
&& ssh-keygen -A
# Copy zinit binaries
COPY --from=builder /build/target/release/zinit-pid1 /usr/bin/
COPY --from=builder /build/target/release/zinit-server /usr/bin/
COPY --from=builder /build/target/release/zinit /usr/bin/
# Copy service definitions
COPY docker/services/ /etc/zinit/services/
COPY docker/Caddyfile /etc/caddy/Caddyfile
# Set root password for SSH testing (change in production!)
RUN echo 'root:zinit' | chpasswd
# Expose ports
EXPOSE 22 80
# Log level: info (default), debug, or trace for more verbosity
ENV ZINIT_LOG_LEVEL=debug
# zinit-pid1 as PID 1 (container mode)
ENTRYPOINT ["/usr/bin/zinit-pid1", "-c"]