• docker

    Dockerでモノレポのpackage.jsonをいい感じにコピーする(ディレクトリ構造を維持しつつコピーする)

    Dockerについて半日ぐらい調べたときの成果3。COPY --parentsについて。

    モノレポ環境でDockerのビルドをしたい時に、yarn install をしたい場合、2つほど問題が発生する。

    • 他パッケージに依存しているときはモノレポのルートでCOPYをする必要がある
    • yarn install --immutableをする場合は、すべてのモノレポのpackage.jsonが必要

    上記を解決するためには、モノレポのルートをビルドコンテキストとして指定する必要がある。そこで各パッケージのpackage.jsonをコピーしたいが、COPY ./packages/*/package.json . のようなコピーの方法は使えない。というのもこれだと./packages/backend/package.json./package.jsonにコピーした後./packages/frontend/package.json./package.jsonにコピーする、という感じの動作になる。つまり、最後にコピーしたpackage.jsonが残る。これを解決するのにはCOPY ./packages/backend/package.json ./packages/backend/package.jsonのように、コピー元とコピー先を指定する必要がある。これだとパッケージが増える度に指定する必要がある。

    そこで**COPY --parentsを利用する。これはコピー元の親ディレクトリを保持したままコピーしてくれる**、上記の課題を解決してくれるすぐものだ。

    COPY --parents ./packages/*/package.json ./

    とやると、./packages/backend/package.json./packages/backend/package.jsonにコピーし、./packages/frontend/package.json./packages/frontend/package.jsonにコピーする、という動作になる。

    ドキュメントに記載通りだが、上記はstableな機能ではないため、# syntax=docker/dockerfile:1.7-labs先頭に扶養する必要がある