diff --git a/Dockerfile b/Dockerfile
index 7a80739e2c726e92d2b41ad91086d56d45e30252..de9ec3e1c78157ccb64d9bae3acf6389200f5959 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,23 +2,35 @@ FROM node:18.12.1-bullseye AS builder
 
 ARG NODE_ENV=production
 
+RUN apt-get update \
+	&& apt-get install -y --no-install-recommends \
+	build-essential
+
 WORKDIR /misskey
 
+COPY [".yarnrc.yml", "package.json", "yarn.lock", "./"]
+COPY [".yarn", "./.yarn"]
+COPY ["scripts", "./scripts"]
+COPY ["packages/backend/package.json", "./packages/backend/"]
+COPY ["packages/client/package.json", "./packages/client/"]
+COPY ["packages/sw/package.json", "./packages/sw/"]
+
+RUN yarn install --immutable
+
 COPY . ./
 
-RUN apt-get update
-RUN apt-get install -y build-essential
 RUN git submodule update --init
-RUN yarn install --immutable
 RUN yarn build
-RUN rm -rf .git
 
 FROM node:18.12.1-bullseye-slim AS runner
 
 WORKDIR /misskey
 
-RUN apt-get update
-RUN apt-get install -y ffmpeg tini
+RUN apt-get update \
+	&& apt-get install -y --no-install-recommends \
+	ffmpeg tini \
+	&& apt-get -y clean \
+	&& rm -rf /var/lib/apt/lists/*
 
 COPY --from=builder /misskey/.yarn/install-state.gz ./.yarn/install-state.gz
 COPY --from=builder /misskey/node_modules ./node_modules