diff --git a/Dockerfile b/Dockerfile index 30f795e..8b8e972 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,103 +1,47 @@ -# FROM debian:bullseye-slim -# FROM -FROM alpine:latest -# FROM scratch +############# +## Builder ## +############# -# DOCKER_GUID=1000 \ - # DOCKER_UID=1000 \ - # DOCKER_TIME_CONT=America \ - # DOCKER_TIME_CITY=New_York \ -# ARG DOCKER_APP_USER=oxker \ - # DOCKER_APP_GROUP=docker +FROM rust:1.63.0-slim as builder -# ENV TZ=${DOCKER_TIME_CONT}/${DOCKER_TIME_CITY} +WORKDIR /usr/src -# RUN apt-get update \ - # && apt-get install -y ca-certificates wget \ - # && update-ca-certificates \ -# RUN groupadd ${DOCKER_APP_GROUP} -# RUN useradd --no-create-home --no-log-init ${DOCKER_APP_USER} - # && mkdir /healthcheck /logs \ - # && chown ${DOCKER_APP_USER}:${DOCKER_APP_GROUP} /logs +# Create blank project +RUN USER=root cargo new oxker -WORKDIR /app +# We want dependencies cached, so copy those first. +COPY Cargo.toml Cargo.lock /usr/src/oxker/ -# COPY --chown=${DOCKER_APP_USER}:${DOCKER_APP_GROUP} docker/healthcheck/health_api.sh /healthcheck +# Set the working directory +WORKDIR /usr/src/oxker -# Copy from local release destination -# COPY --chown=${DOCKER_APP_USER} target/release/oxker /app/ -# COPY target/release/oxker . -# RUN mkdir app -COPY /target/x86_64-unknown-linux-musl/release/oxker ./ -COPY ./start_oxker.sh ./ -RUN chmod +x /app/start_oxker.sh +## Install target platform (Cross-Compilation) --> Needed for Alpine +RUN rustup target add x86_64-unknown-linux-musl -# Use an unprivileged user -# USER ${DOCKER_APP_USER} -ENV RUST_BACKTRACE=full -# ENTRYPOINT ["./oxker" ] -# CMD [ "./oxker"] -ENTRYPOINT ["/app/start_oxker.sh"] +# This is a dummy build to get the dependencies cached. +RUN cargo build --target x86_64-unknown-linux-musl --release -# docker run --rm -ti \ -# --name=ctop \ -# --volume /var/run/docker.sock:/var/run/docker.sock:ro \ -# # quay.io/vektorlab/ctop:latest +# Now copy in the rest of the sources +COPY src /usr/src/oxker/src/ +## Touch main.rs to prevent cached release build +RUN touch /usr/src/oxker/src/main.rs -# docker run --rm -it --volume /var/run/docker.sock:/var/run/docker.sock:ro oxker +# This is the actual application build. +RUN cargo build --target x86_64-unknown-linux-musl --release -# docker run --rm -it --volume /var/run/docker.sock:/var/run/docker.sock:ro ghcr.io/mrjackwills/oxker:latest -# could get arch, and then download appropoatley from github? +############# +## Runtime ## +############# -# FROM rust:latest as cargo-build +FROM alpine:latest AS runtime -# WORKDIR /build -# ENV RUSTFLAGS="-C target-feature=+crt-static" +# Copy application binary from builder image +COPY --from=builder /usr/src/oxker/target/x86_64-unknown-linux-musl/release/oxker /usr/local/bin +COPY start_oxker.sh ./ +RUN chmod +x /start_oxker.sh -# COPY Cargo* ./build -# COPY src/ ./build +# Run the application +ENTRYPOINT [ "./start_oxker.sh"] -# RUN cargo build --release --target x86_64-unknown-linux-gnu - -# ##################################### - - -# ##################################### - -# FROM scratch - -# COPY --from=cargo-build /build/target/x86_64-unknown-linux-gnu/release/oxker /oxker - -# ENTRYPOINT [ "/oxker" ] - -# FROM rust:latest AS build -# WORKDIR /oxker_build - -# # Download the target for static linking. -# RUN rustup target add x86_64-unknown-linux-musl - -# # Create a dummy project and build the app's dependencies. -# # If the Cargo.toml or Cargo.lock files have not changed, -# # we can use the docker build cache and skip these (typically slow) steps. -# RUN USER=root cargo new oxker --bin -# WORKDIR /oxker_build -# COPY Cargo.toml Cargo.lock ./ -# # CMD ["sleep", "6000"] - -# # RUN cargo build --release - -# # Copy the source and build the application. -# COPY src ./src/ -# RUN cargo install --target x86_64-unknown-linux-musl --path . - -# # Copy the statically-linked binary into a scratch container. -# FROM scratch -# COPY --from=build /oxker_build/bin/oxker . -# # USER 1000 -# CMD ["./oxker"] - -# cross build --target x86_64-unknown-linux-musl --release - -# rustup target add x86_64-unknown-linux-musl -# cargo build --release --target=x86_64-unknown-linux-musl \ No newline at end of file +# docker run --rm -it --volume /var/run/docker.sock:/var/run/docker.sock:ro oxker \ No newline at end of file diff --git a/start_oxker.sh b/start_oxker.sh index 10a03d1..d0563c0 100755 --- a/start_oxker.sh +++ b/start_oxker.sh @@ -1,7 +1,7 @@ #!/bin/sh set -e -# No idea why this is sloving my issue, or even where the issue is originally coming from -sleep 1 +# No idea why this is solving my issue, or even where the issue is originally coming from +sleep .1 -exec ./oxker "$@" \ No newline at end of file +exec /usr/local/bin/oxker "$@" \ No newline at end of file