Skip to content

Commit 52f824a

Browse files
committed
wip
1 parent 0bdc495 commit 52f824a

File tree

3 files changed

+82
-0
lines changed

3 files changed

+82
-0
lines changed

.github/workflows/docker.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ jobs:
2626
- name: setup docker buildx
2727
uses: docker/setup-buildx-action@v3
2828

29+
# FIXME: we have to set the release profile here somehoe?
30+
2931
- name: build docker image
3032
uses: docker/build-push-action@v6
3133
with:

Justfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
set shell := ["bash", "-Eeuo", "pipefail", "-c"]
2+
set ignore-comments
23

34
# List available commands
45
_default:

dockerfiles/Example

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# syntax=docker/dockerfile:1.7
2+
3+
ARG RUST_VERSION=1.82
4+
ARG APP=/app
5+
6+
########################
7+
# deps base (warm cache)
8+
########################
9+
FROM rust:${RUST_VERSION} AS deps-base
10+
WORKDIR ${APP}
11+
12+
COPY Cargo.toml Cargo.lock ./
13+
RUN mkdir -p src && echo "fn main(){}" > src/main.rs
14+
RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry,sharing=locked \
15+
--mount=type=cache,target=${APP}/target,id=cargo-target,sharing=locked \
16+
cargo build --release
17+
RUN rm -rf src
18+
19+
########################
20+
# build: web
21+
########################
22+
FROM rust:${RUST_VERSION} AS build-web
23+
WORKDIR ${APP}
24+
COPY --from=deps-base ${APP}/ ./
25+
COPY src ./src
26+
# or copy only needed subdirs if workspace
27+
RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry,sharing=locked \
28+
--mount=type=cache,target=${APP}/target,id=cargo-target,sharing=locked \
29+
cargo build --release --bin web
30+
31+
########################
32+
# build: worker
33+
########################
34+
FROM rust:${RUST_VERSION} AS build-worker
35+
WORKDIR ${APP}
36+
COPY --from=deps-base ${APP}/ ./
37+
COPY src ./src
38+
RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry,sharing=locked \
39+
--mount=type=cache,target=${APP}/target,id=cargo-target,sharing=locked \
40+
cargo build --release --bin worker
41+
42+
########################
43+
# build: cron
44+
########################
45+
FROM rust:${RUST_VERSION} AS build-cron
46+
WORKDIR ${APP}
47+
COPY --from=deps-base ${APP}/ ./
48+
COPY src ./src
49+
RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry,sharing=locked \
50+
--mount=type=cache,target=${APP}/target,id=cargo-target,sharing=locked \
51+
cargo build --release --bin cron
52+
53+
########################
54+
# build: migrate
55+
########################
56+
FROM rust:${RUST_VERSION} AS build-migrate
57+
WORKDIR ${APP}
58+
COPY --from=deps-base ${APP}/ ./
59+
COPY src ./src
60+
RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo-registry,sharing=locked \
61+
--mount=type=cache,target=${APP}/target,id=cargo-target,sharing=locked \
62+
cargo build --release --bin migrate
63+
64+
########################
65+
# runtime
66+
########################
67+
FROM gcr.io/distroless/cc-debian12 AS runtime
68+
WORKDIR /app
69+
COPY --from=build-web /app/target/release/web /usr/local/bin/web
70+
COPY --from=build-worker /app/target/release/worker /usr/local/bin/worker
71+
COPY --from=build-cron /app/target/release/cron /usr/local/bin/cron
72+
COPY --from=build-migrate /app/target/release/migrate /usr/local/bin/migrate
73+
ENTRYPOINT ["/usr/local/bin/web"]
74+
75+
76+
#docker buildx build \
77+
# --cache-from=type=local,src=.buildx-cache \
78+
# --cache-to=type=local,dest=.buildx-cache,mode=max \
79+
# -t your/image:tag .

0 commit comments

Comments
 (0)