Bir Dockerfile dosyasında
COPY . .
Benim durumumda node_modules dizinini bir dizinin tamamını hariç tutmak istiyorum.
Bunun gibi bir şey:
COPY [all but **/node_modules/**] .
Docker ile bu mümkün müdür?
Bir Dockerfile dosyasında
COPY . .
Benim durumumda node_modules dizinini bir dizinin tamamını hariç tutmak istiyorum.
Bunun gibi bir şey:
COPY [all but **/node_modules/**] .
Docker ile bu mümkün müdür?
Yanıtlar:
.dockerignore
Docker derleme bağlam dizininizde dosya oluşturun (bu durumda, büyük olasılıkla düğüm_modüllerinin üst öğesi olan bir dizin) içinde bir satır vardır:
**/node_modules
Her ne kadar muhtemelen sadece:
node_modules
Dockerignore hakkında bilgi: https://docs.docker.com/engine/reference/builder/#dockerignore-file
/config/nginx/ /config/logstash/
bunu konteyner ls config/ gunicorn logs logstash nginx
ls /config/
bu yolları .dockerignore'unuza lider olmadan eklemeyi denediniz /
mi?
node_modules
alt dizinlerde çalışmaz.
Bir .dockerignore dosyası kullanamayanlar için (örneğin, dosyaya bir KOPYA'da ihtiyacınız varsa, ancak başka bir dosyaya ihtiyacınız yoksa):
Evet, ancak birden fazla KOPYA talimatına ihtiyacınız var. Özellikle, dosya adındaki hariç tutmak istediğiniz her harf için bir KOPYALAMA gerekir.
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'
Tam dosya adına veya yalnızca makul bir şekilde emin olduğunuz ön eke sahip olana kadar devam etmek başka dosyaya sahip olmayacaktır.
COPY failed: no source files were specified
'hayır' ile başlayan hiçbir dosya olmadığında ancak 'nod' ile başlayan bir dosya elde edeceğiniz için işe yaramaz .
src/
gidecek /var/www
ve /conf/nginx.conf
gidin /etc/nginx/conf.d/default.conf
. Ayrıca, her şeyi kopyalayabilir ve RUN rm -r conf
daha sonra (kaynak ağacı olduğu gibi saklayabilirsiniz). Birinin başka bir önerisi olup olmadığını duymak isterim.
COPY [^node_modules]*
tüm üst düzey dosyaları kopyalamak için sadece bir taneye ihtiyacınız olacaktır.
Benim durumumda, Docker dosyam vendor
dizini (PHP eşdeğeri node_modules
) üreten bir yükleme adımı içeriyordu . Daha sonra COPY
bu dizini son uygulama görüntüsüne aktarıyorum. Bu nedenle, koymak olamazdı vendor
skinTenimde .dockerignore
. Benim çözüm sadece composer install
(PHP eşdeğeri npm install
) gerçekleştirmeden önce dizini silmek oldu .
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 .
Bu çözüm çalışır ve son görüntüyü şişirmez, ancak ideal değildir, çünkü vendor
ana bilgisayardaki dizin, zaman ekleyen oluşturma işlemi sırasında Docker içeriğine kopyalanır.
composer.lock
önce neden kaldırmanız gerektiğine dikkat edin composer install
. Kilit dosyası olmadan, bir sonraki sefer oluşturduğunuzda farklı bir bağımlılıklar kümesi (satıcı klasörü) yüklenebilir.
.Dockerignore eklemek benim için çalışıyor. Bir ek nokta Windows'ta bu çözümü deneyenler , windows .dockerignore dosyası oluşturmanıza izin vermeyecektir (varsayılan olarak başlangıçtan itibaren dosya oluşturmaya izin vermez.)
İle başlayan böyle bir dosya oluşturmak için. Windows üzerinde , : Bir de nokta biten benzeri yer alır .dockerignore.
ve isabet girmek (Klasör seçeneklerinden görünüm uzatma seçenekleri sağladı şartıyla)
Node_modules öğesini geçerli dizinden hariç tutma
node_modules
Herhangi bir alt alt dizinde node_modules hariç
*/node_modules
İşte resmi dokümanlar
.dockerignore
?