Dockerfileでは、
COPY . .
ディレクトリー全体(私の場合はnode_modulesディレクトリー)を除外したい。
このようなもの:
COPY [all but **/node_modules/**] .
これはDockerで可能ですか?
Dockerfileでは、
COPY . .
ディレクトリー全体(私の場合はnode_modulesディレクトリー)を除外したい。
このようなもの:
COPY [all but **/node_modules/**] .
これはDockerで可能ですか?
回答:
ファイルを作成し.dockerignore
、その中に1行で(ので、この場合は、最も可能性の高いnode_modulesに親であるディレクトリ)あなたのドッキングウィンドウのビルドコンテキストのディレクトリに:
**/node_modules
おそらくあなたはおそらくただ:
node_modules
dockerignoreに関する情報:https ://docs.docker.com/engine/reference/builder/#dockerignore-file
/config/nginx/ /config/logstash/
、私はこれをコンテナbashで見つけます:ls config/ gunicorn logs logstash nginx
ls /config/
これらのパスを.dockerignoreに追加せずに先頭に付け/
ませんか?
node_modules
サブディレクトリでは動作しません。
.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'
完全なファイル名を取得するまで、またはプレフィックスだけで他のファイルを取得できないと確信できるまで続行します。
COPY failed: no source files were specified
「no」で始まるが「nod」ではないファイルがないときにを取得するため、これはワートになりません。
src/
行って/var/www
に/conf/nginx.conf
行く必要があり/etc/nginx/conf.d/default.conf
ます。また、すべてをコピーして、RUN rm -r conf
後でソースツリーをそのままにしておくこともできます。他に提案があるかどうか知りたいのですが。
COPY [^node_modules]*
すべての最上位ファイルをコピーすることです。
私の場合、私のDockerfileにはインストール手順が含まれており、これによりvendor
ディレクトリが作成されます(PHPでに相当node_modules
)。次に、COPY
このディレクトリを最終的なアプリケーションイメージに移動します。したがって、私はvendor
私の中に入れることができませんでした.dockerignore
。私の解決策は、実行する前にディレクトリを削除することでしたcomposer install
(PHPのに相当npm install
)。
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
このソリューションは機能し、最終的なイメージを膨らませることはありませんがvendor
、ビルドプロセス中にホスト上のディレクトリがDockerコンテキストにコピーされ、時間がかかるため、理想的ではありません。
composer.lock
前に削除する必要がある理由を確認してくださいcomposer install
。ロックファイルがないと、次回のビルド時に別の依存関係セット(ベンダーフォルダー)がインストールされる可能性があります。
現在のディレクトリからのnode_modulesの除外
node_modules
直接のサブディレクトリにあるnode_modulesを除外する
*/node_modules
.dockerignore
ですか?