From ecb641624425dba5dc6b10330b5a91d084b40f6b Mon Sep 17 00:00:00 2001 From: Daniel Wiesenberg Date: Sat, 1 Aug 2020 15:18:49 +0200 Subject: [PATCH] =?UTF-8?q?Image=20now=20builds=20and=20runs=20?= =?UTF-8?q?=F0=9F=8E=89=20Thx=20to=20the=20help=20of=20yzhr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 68 +++++++++++++--------------------------------- docker-compose.yml | 2 +- 2 files changed, 20 insertions(+), 50 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5217e657..6825d82a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,43 +4,23 @@ ########################## BUILD IMAGE ########################## -# Musl build image to build Conduits statically compiled binary -FROM rustlang/rust:nightly-alpine3.12 as builder +# Alpine build image to build Conduits statically compiled binary +FROM alpine:3.12 as builder -# Don't download Rust docs -RUN rustup set profile minimal - -ENV USER "conduit" -#ENV RUSTFLAGS='-C link-arg=-s' +# Add 'edge'-repository to get Rust 1.45 +RUN sed -i \ + -e 's|v3\.12|edge|' \ + /etc/apk/repositories # Install packages needed for building all crates RUN apk add --no-cache \ - musl-dev \ - openssl-dev \ - pkgconf - -# Create dummy project to fetch all dependencies. -# Rebuilds are a lot faster when there are no changes in the -# dependencies. -RUN cargo new --bin /app -WORKDIR /app - -# Copy cargo files which specify needed dependencies -COPY ./Cargo.* ./ - -# Add musl target, as we want to run your project in -# an alpine linux image -RUN rustup target add x86_64-unknown-linux-musl - -# Build dependencies and remove dummy project, except -# target folder, as it contains the dependencies -RUN cargo build --release --color=always ; \ - find . -not -path "./target*" -delete - -# Now copy and build the real project with the pre-built -# dependencies. + cargo \ + openssl-dev + +# Copy project from current folder and build it COPY . . -RUN cargo build --release --color=always +RUN cargo install --path . +#RUN cargo install --git "https://git.koesters.xyz/timo/conduit.git" ########################## RUNTIME IMAGE ########################## # Create new stage with a minimal image for the actual @@ -68,26 +48,15 @@ LABEL org.opencontainers.image.created=${CREATED} \ org.label-schema.docker.build="docker build . -t conduit:latest --build-arg CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ') --build-arg VERSION=$(grep -m1 -o '[0-9].[0-9].[0-9]' Cargo.toml)"\ maintainer="weasy@hotmail.de" -# Change some Rocket.rs default configs. They can then -# be changed to different values using env variables. -ENV ROCKET_CLI_COLORS="on" -#ENV ROCKET_SERVER_NAME="conduit.rs" -ENV ROCKET_ENV="production" -ENV ROCKET_ADDRESS=0.0.0.0 -ENV ROCKET_PORT=14004 -ENV ROCKET_LOG="normal" -ENV ROCKET_DATABASE_PATH="/data/sled" -ENV ROCKET_REGISTRATION_DISABLED="true" -#ENV ROCKET_WORKERS=10 EXPOSE 14004 # Copy config files from context and the binary from # the "builder" stage to the current stage into folder # /srv/conduit and create data folder for database -RUN mkdir -p /srv/conduit /data/sled +RUN mkdir -p /srv/conduit/.local/share/conduit -COPY --from=builder /app/target/release/conduit ./srv/conduit/ +COPY --from=builder /root/.cargo/bin/conduit /srv/conduit/ # Add www-data user and group with UID 82, as used by alpine # https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install @@ -97,12 +66,13 @@ RUN set -x ; \ addgroup www-data www-data 2>/dev/null && exit 0 ; exit 1 # Change ownership of Conduit files to www-data user and group -RUN chown -cR www-data:www-data /srv/conduit /data - -VOLUME /data +RUN chown -cR www-data:www-data /srv/conduit RUN apk add --no-cache \ - ca-certificates + ca-certificates \ + libgcc + +VOLUME ["/srv/conduit/.local/share/conduit"] # Set user to www-data USER www-data diff --git a/docker-compose.yml b/docker-compose.yml index 91626dd4..d0e41352 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: ports: - 14004:14004 volumes: - - db:/data/sled + - db:/srv/conduit/.local/share/conduit environment: ROCKET_SERVER_NAME: example.com # replace with your own name ### Uncomment and change values as needed