Просмотр исходного кода

improve Dockerfile for pdf-converter

Yuki Takei 11 месяцев назад
Родитель
Сommit
2b7e8f83e5
1 измененных файлов с 33 добавлено и 22 удалено
  1. 33 22
      apps/pdf-converter/docker/Dockerfile

+ 33 - 22
apps/pdf-converter/docker/Dockerfile

@@ -1,22 +1,31 @@
-# syntax = docker/dockerfile:1
+# syntax = docker/dockerfile:1.4
+
+ARG OPT_DIR="/opt"
+ARG PNPM_HOME="/root/.local/share/pnpm"
 
 
 ##
 ##
 ## base
 ## base
 ##
 ##
 FROM node:20-slim AS base
 FROM node:20-slim AS base
 
 
-ENV optDir="/opt"
+ARG OPT_DIR
+ARG PNPM_HOME
+
+WORKDIR $OPT_DIR
 
 
-WORKDIR ${optDir}
+# install tools
+RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
+    --mount=type=cache,target=/var/cache/apt,sharing=locked \
+  apt-get update && apt-get install -y ca-certificates wget --no-install-recommends
 
 
 # install pnpm
 # install pnpm
-RUN apt-get update && apt-get install -y ca-certificates wget --no-install-recommends \
-  && wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
-ENV PNPM_HOME="/root/.local/share/pnpm"
+RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.shrc" SHELL="$(which sh)" PNPM_VERSION="10.4.1" sh -
+ENV PNPM_HOME=$PNPM_HOME
 ENV PATH="$PNPM_HOME:$PATH"
 ENV PATH="$PNPM_HOME:$PATH"
 
 
 # install turbo
 # install turbo
-RUN pnpm add turbo --global
+RUN --mount=type=cache,target=$PNPM_HOME/store,sharing=locked \
+  pnpm add turbo --global
 
 
 
 
 
 
@@ -25,13 +34,15 @@ RUN pnpm add turbo --global
 ##
 ##
 FROM base AS builder
 FROM base AS builder
 
 
-ENV optDir="/opt"
+ENV PNPM_HOME=$PNPM_HOME
+ENV PATH="$PNPM_HOME:$PATH"
 
 
-WORKDIR ${optDir}
+WORKDIR $OPT_DIR
 
 
 COPY . .
 COPY . .
 
 
-RUN pnpm install ---frozen-lockfile
+RUN --mount=type=cache,target=$PNPM_HOME/store,sharing=locked \
+  pnpm install ---frozen-lockfile
 
 
 # build
 # build
 RUN turbo run clean
 RUN turbo run clean
@@ -40,7 +51,7 @@ RUN turbo run build --filter @growi/pdf-converter
 # make artifacts
 # make artifacts
 RUN pnpm deploy out --prod --filter @growi/pdf-converter
 RUN pnpm deploy out --prod --filter @growi/pdf-converter
 RUN rm -rf apps/pdf-converter/node_modules && mv out/node_modules apps/pdf-converter/node_modules
 RUN rm -rf apps/pdf-converter/node_modules && mv out/node_modules apps/pdf-converter/node_modules
-RUN tar -zcf packages.tar.gz \
+RUN tar -zcf /tmp/packages.tar.gz \
   package.json \
   package.json \
   apps/pdf-converter/package.json \
   apps/pdf-converter/package.json \
   apps/pdf-converter/dist \
   apps/pdf-converter/dist \
@@ -55,27 +66,27 @@ RUN tar -zcf packages.tar.gz \
 FROM node:20-slim
 FROM node:20-slim
 LABEL maintainer="Yuki Takei <yuki@weseek.co.jp>"
 LABEL maintainer="Yuki Takei <yuki@weseek.co.jp>"
 
 
+ARG OPT_DIR
+
 ENV NODE_ENV="production"
 ENV NODE_ENV="production"
 ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
 ENV PUPPETEER_EXECUTABLE_PATH="/usr/bin/chromium"
 ENV LANG="ja_JP.UTF-8"
 ENV LANG="ja_JP.UTF-8"
 
 
-ENV optDir="/opt"
-ENV appDir="${optDir}/pdf-converter"
+ENV appDir="$OPT_DIR/pdf-converter"
 
 
-RUN apt-get update && apt-get install -y chromium fonts-lato fonts-ipafont-gothic fonts-noto-cjk gosu \
-    && apt-get clean \
-    && rm -rf /var/lib/apt/lists/*; \
+RUN --mount=type=cache,target=/var/lib/apt,sharing=locked \
+    --mount=type=cache,target=/var/cache/apt,sharing=locked \
+  apt-get update; \
+  apt-get install -y chromium fonts-lato fonts-ipafont-gothic fonts-noto-cjk gosu; \
+  rm -rf /var/lib/apt/lists/*; \
 # verify that the binary works
 # verify that the binary works
-    gosu nobody true
-
-# copy artifacts
-COPY --from=builder --chown=node:node \
-  ${optDir}/packages.tar.gz ${appDir}/
+  gosu nobody true
 
 
 # extract artifacts as 'node' user
 # extract artifacts as 'node' user
 USER node
 USER node
 WORKDIR ${appDir}
 WORKDIR ${appDir}
-RUN tar -xf packages.tar.gz && rm packages.tar.gz
+RUN --mount=type=bind,from=builder,source=/tmp/packages.tar.gz,target=/tmp/packages.tar.gz \
+  tar -zxf /tmp/packages.tar.gz -C ${appDir}/
 
 
 COPY --chown=node:node --chmod=700 apps/pdf-converter/docker/docker-entrypoint.sh /
 COPY --chown=node:node --chmod=700 apps/pdf-converter/docker/docker-entrypoint.sh /