[解決済み] Dockerはglobパターンを使ってファイルをCOPYしますか?
2022-03-03 15:13:30
質問
Yarnで管理しているmonorepoで、Dockerのキャッシュレイヤーを利用してビルドを高速化したい。
package.json
と
yarn.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
ディレクトリが変更されました。
関連
-
[解決済み] docker cp が実行中のインスタンスで "No such container:path" を投げる [閉じた] 。
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] 古いDockerコンテナを削除する方法
-
[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】apt-get でインストールしても docker コマンドが見つからない。
-
[解決済み】ドッカーコンテナがすぐに終了してしまう理由
-
[解決済み】D-Bus接続の取得に失敗しました。操作が許可されていません
-
[解決済み] Docker - デーモンからのエラー応答:クライアントはサーバーよりも新しいです。
-
Docker npm getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
-
エラー:入力デバイスはTTYではありません。
-
bashでの解決方法 : docker :コマンドが見つかりません。
-
docker パーミッションが拒否されました。
-
dockerでgitlabをインストールする際にパーミッションの例外が発生する
-
様々なDockerディレクトリの役割