1. ホーム
  2. ドッカー

[解決済み] Dockerはglobパターンを使ってファイルをCOPYしますか?

2022-03-03 15:13:30

質問

Yarnで管理しているmonorepoで、Dockerのキャッシュレイヤーを利用してビルドを高速化したい。 package.jsonyarn.lock を実行すると yarn install をコピーして、残りのファイルをコピーしてください。

これが私のレポの構成です。

packages/one/package.json
packages/one/index.js
packages/two/package.json
packages/two/index.js
package.json
yarn.lock

そして、これがDockerfileの興味のある部分です。

COPY package.json .
COPY yarn.lock .
COPY packages/**/package.json ./
RUN yarn install --pure-lockfile
COPY . .

問題は、3番目の COPY コマンドでは何もコピーされないのですが、どうすれば期待通りの結果を得られるでしょうか?

どのように解決するのですか?

をベースにした解決策があります。 マルチステージビルド という機能があります。

FROM node:12.18.2-alpine3.11

WORKDIR /app
COPY ["package.json", "yarn.lock", "./"]
# Step 2: Copy whole app
COPY packages packages

# Step 3: Find and remove non-package.json files
RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -print | xargs rm -rf

# Step 4: Define second build stage
FROM node:12.18.2-alpine3.11

WORKDIR /app
# Step 5: Copy files from the first build stage.
COPY --from=0 /app .

RUN yarn install --frozen-lockfile

COPY . .

# To restore workspaces symlinks
RUN yarn install --frozen-lockfile

CMD yarn start

オン Step 5 の中にファイルがあっても、レイヤーキャッシュは再利用されます。 packages ディレクトリが変更されました。