Dockerfileで、私は持っています
COPY . .
ディレクトリ全体、私の場合はnode_modulesディレクトリを除外します。
このようなもの:
COPY [all but **/node_modules/**] .
Dockerでこれは可能ですか?
Docker build contextディレクトリにファイル.dockerignore
を作成します(したがって、この場合はnode_modulesの親ディレクトリになる可能性が最も高いです)。
**/node_modules
あなたはおそらく欲しいだけですが:
node_modules
Dockerignoreに関する情報: https://docs.docker.com/engine/reference/builder/#dockerignore-file
.dockerignoreファイルを使用できない人のために(たとえば、あるCOPYでファイルを必要とするが、別のCOPYでは必要としない場合):
はい、ただし複数のCOPY命令が必要です。具体的には、除外したいファイル名の各文字に対してCOPYが必要です。
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
完全なファイル名、または他のファイルがないことを合理的に確信しているプレフィックスだけになるまで続けます。
.dockerignoreを追加することは私のために働きます。もう一つのポイントWindowsでこの解決法を試している人は、windowsで.dockerignoreファイルを作成することはできません(そうではありません)デフォルトでは、tはで始まるファイルを作成できます。
そのためのコツはここに記載されています。 https://www.hanselman.com/blog/HowToCreateAFileWithADotPrefixInWindowsExplorer.aspx
これは、次のように末尾のドットも含みます。.dockerignore.
およびhit enter(フォルダオプションから表示拡張オプションを有効にしている場合)
私の場合、私のDockerfileにはインストール手順が含まれていて、それによってvendor
ディレクトリが作成されました(PHP同等のnode_modules
)。次にこのディレクトリをCOPY
にして最終的なアプリケーションイメージに移動します。したがって、vendor
を.dockerignore
に入れることはできませんでした。私の解決策はcomposer install
(PHP npm install
と同等のもの)を実行する前に単にディレクトリを削除することでした。
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf composer.lock vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
この解決策は機能し、最終イメージを肥大化させることはありませんが、構築プロセス中にホスト上のvendor
ディレクトリがDockerコンテキストにコピーされるため時間がかかるため、理想的ではありません。