|
1 | 1 | # syntax=docker/dockerfile:1@sha256:ac85f380a63b13dfcefa89046420e1781752bab202122f8f50032edf31be0021 |
2 | 2 |
|
3 | | -FROM buildpack-deps:bookworm AS model-fetch |
4 | | -WORKDIR /app |
5 | | -RUN wget https://github.com/jpreprocess/jpreprocess/releases/download/v0.6.1/naist-jdic-jpreprocess.tar.gz \ |
6 | | - && tar xzf naist-jdic-jpreprocess.tar.gz \ |
7 | | - && rm naist-jdic-jpreprocess.tar.gz |
8 | | -RUN git clone --depth 1 https://github.com/icn-lab/htsvoice-tohoku-f01.git |
9 | | - |
10 | | -FROM ghcr.io/jqlang/jq:1.7 as fetch-jq |
11 | | - |
12 | | -FROM quay.io/curl/curl-base:8.4.0 as fetch-pnpm |
| 3 | +# ビルド時に基礎として使うイメージを定義 |
| 4 | +FROM buildpack-deps:bookworm as base-build |
13 | 5 | ENV SHELL="sh" |
14 | 6 | ENV ENV="/tmp/env" |
15 | 7 | ENV PNPM_HOME="/pnpm" |
16 | | -WORKDIR /dist |
17 | | -RUN --mount=type=bind,source=package.json,target=package.json \ |
18 | | - --mount=type=bind,from=fetch-jq,source=/jq,target=/mounted-bin/jq \ |
19 | | - curl -fsSL --compressed https://get.pnpm.io/install.sh | env PNPM_VERSION=$(cat package.json | /mounted-bin/jq -r .packageManager | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') sh - |
20 | | - |
21 | | -FROM buildpack-deps:bookworm as fetch-deps |
22 | | -ENV PNPM_HOME="/pnpm" |
23 | 8 | ENV PATH="$PNPM_HOME:$PATH" |
24 | | -WORKDIR /package |
25 | | -COPY --link --from=fetch-pnpm /pnpm/ /pnpm/ |
26 | | -RUN pnpm config set store-dir /.pnpm-store |
27 | | -COPY --link .npmrc .node-version ./ |
28 | | -RUN echo "use-node-version=`cat .node-version`" >> .npmrc |
29 | | -RUN --mount=type=cache,target=/.pnpm-store \ |
30 | | - --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ |
31 | | - pnpm fetch |
32 | | -COPY --link package.json ./ |
33 | | - |
34 | | -FROM fetch-deps as dev-deps |
35 | | -RUN --mount=type=cache,target=/.pnpm-store \ |
36 | | - --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ |
37 | | - pnpm install --frozen-lockfile --offline |
| 9 | +# jqのバイナリを取得する => /jq |
| 10 | +FROM ghcr.io/jqlang/jq:1.7 as fetch-jq |
38 | 11 |
|
39 | | -FROM buildpack-deps:bookworm as builder |
40 | | -ENV PNPM_HOME="/pnpm" |
41 | | -ENV PATH="$PNPM_HOME:$PATH" |
| 12 | +# 音声モデルを取得する => /app/ |
| 13 | +FROM --platform=$BUILDPLATFORM base-build AS model-fetch |
42 | 14 | WORKDIR /app |
43 | | -RUN --mount=type=bind,from=fetch-deps,source=/pnpm/,target=/pnpm/ \ |
44 | | - --mount=type=bind,from=dev-deps,source=/package/node_modules/,target=node_modules/ \ |
45 | | - --mount=type=bind,source=package.json,target=package.json \ |
46 | | - --mount=type=bind,source=.npmrc,target=.npmrc \ |
47 | | - --mount=type=bind,source=build.js,target=build.js \ |
48 | | - --mount=type=bind,source=src/,target=src/ \ |
49 | | - pnpm build |
| 15 | +RUN wget https://github.com/jpreprocess/jpreprocess/releases/download/v0.6.1/naist-jdic-jpreprocess.tar.gz \ |
| 16 | + && tar xzf naist-jdic-jpreprocess.tar.gz \ |
| 17 | + && rm naist-jdic-jpreprocess.tar.gz |
| 18 | +RUN git clone --depth 1 https://github.com/icn-lab/htsvoice-tohoku-f01.git |
50 | 19 |
|
51 | | -FROM fetch-deps as prod-deps |
| 20 | +FROM base-build as deps |
| 21 | +WORKDIR /app |
| 22 | +COPY --link --from=fetch-jq /jq ./ |
| 23 | +COPY --link package.json ./ |
| 24 | +RUN curl -fsSL --compressed https://get.pnpm.io/install.sh | env PNPM_VERSION=$(cat package.json | ./jq -r .packageManager | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') sh - |
| 25 | +COPY --link .npmrc .node-version ./ |
| 26 | +RUN echo "store-dir=/.pnpm-store" >> .npmrc &&\ |
| 27 | + echo "use-node-version=`cat .node-version`" >> .npmrc |
| 28 | +COPY --link pnpm-lock.yaml ./ |
52 | 29 | ARG NODE_ENV="production" |
53 | | -RUN --mount=type=cache,target=/.pnpm-store \ |
54 | | - --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \ |
55 | | - pnpm install --frozen-lockfile --offline |
| 30 | +RUN pnpm install --frozen-lockfile |
| 31 | + |
| 32 | +# ビルドする => /app/dist/ |
| 33 | +FROM --platform=$BUILDPLATFORM deps as builder |
| 34 | +ARG NODE_ENV="" |
| 35 | +RUN pnpm install --frozen-lockfile |
| 36 | +COPY --link build.js ./ |
| 37 | +COPY --link src/ ./src/ |
| 38 | +RUN pnpm build |
56 | 39 |
|
57 | 40 | FROM gcr.io/distroless/cc-debian12:nonroot as runner |
58 | 41 | ENV PNPM_HOME="/pnpm" |
59 | 42 | ENV PATH="$PNPM_HOME:$PATH" |
60 | 43 | ENV NODE_ENV="production" |
61 | 44 | WORKDIR /app |
62 | 45 | COPY --link --from=model-fetch /app/ ./model/ |
63 | | -COPY --link --from=fetch-deps /pnpm/ /pnpm/ |
| 46 | +COPY --link --from=deps /pnpm/ /pnpm/ |
64 | 47 | COPY --link --from=builder /app/dist/ ./dist/ |
65 | | -COPY --from=prod-deps /package/node_modules/ ./node_modules/ |
66 | | -COPY --link .npmrc package.json ./ |
| 48 | +COPY --from=deps /app/node_modules/ ./node_modules/ |
| 49 | +COPY --link --from=deps /app/.npmrc ./ |
| 50 | +COPY --link package.json ./ |
67 | 51 | ENTRYPOINT [ "pnpm", "--shell-emulator" ] |
68 | 52 | CMD [ "start" ] |
0 commit comments