Working multi-stage container build
This commit is contained in:
parent
2b1e350ce1
commit
107bb05d47
3 changed files with 30 additions and 8 deletions
2
client/.containerignore
Normal file
2
client/.containerignore
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
dist
|
||||||
|
node_modules
|
7
justfile
7
justfile
|
@ -7,14 +7,15 @@ build-client:
|
||||||
|
|
||||||
# npm run build places the build in the server/public directory
|
# npm run build places the build in the server/public directory
|
||||||
build-container: build-client
|
build-container: build-client
|
||||||
cd server && podman build -t server .
|
cd server && podman build -t fb-server .
|
||||||
|
|
||||||
start-release: build-container
|
start-release: build-container
|
||||||
podman run -d -p 8080:8080 --name frostbyte server
|
podman container rm -f frostbyte
|
||||||
|
podman run -d -p 8080:8080 --name frostbyte fb-server
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
podman container rm -f frostbyte
|
podman container rm -f frostbyte
|
||||||
podman image rm -f server
|
podman image rm -f fb-server
|
||||||
rm -rf client/dist
|
rm -rf client/dist
|
||||||
rm -rf client/node_modules
|
rm -rf client/node_modules
|
||||||
rm -rf server/public
|
rm -rf server/public
|
||||||
|
|
|
@ -1,7 +1,26 @@
|
||||||
|
# The rust:latest-alpine uses musl libc
|
||||||
FROM docker.io/rust:latest as builder
|
FROM docker.io/rust:latest as builder
|
||||||
workdir /app
|
WORKDIR /build
|
||||||
ADD . /app
|
ADD . /build
|
||||||
RUN cargo clean
|
RUN apt update
|
||||||
RUN cargo build --release
|
RUN apt install musl musl-dev musl-tools -y
|
||||||
|
RUN rustup target add x86_64-unknown-linux-musl
|
||||||
|
RUN cargo build --target x86_64-unknown-linux-musl --release
|
||||||
|
|
||||||
|
FROM docker.io/alpine:latest as runner
|
||||||
|
|
||||||
|
# Add a non-root user for running the server
|
||||||
|
RUN addgroup -S user && adduser -S user -G user
|
||||||
|
|
||||||
|
# Copy the server binary and the public directory
|
||||||
|
WORKDIR /runner
|
||||||
|
COPY --from=builder /build/target/x86_64-unknown-linux-musl/release/server /runner/server
|
||||||
|
COPY --from=builder /build/public /runner/public
|
||||||
|
|
||||||
|
# Make sure the user can access the files
|
||||||
|
RUN chown -R user:user /runner
|
||||||
|
USER user
|
||||||
|
|
||||||
|
# Run the server
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
CMD ["cargo", "run", "--release"]
|
CMD ["./server"]
|
||||||
|
|
Loading…
Reference in a new issue