Docker Volumes, kapsayıcılarınız için kalıcı depolama sağlar. Hacimlerde depolanan veriler kaplardan bağımsız olarak depolanır, böylece yeniden başlatmalar ve değiştirmelerden sonra geri yüklenebilir. Birimler, aynı anda birden fazla kapsayıcı ile kullanımı destekleyerek veri paylaşım durumlarını kolaylaştırır.
Bir Docker biriminin bağlanması, içeriğinin hedef kapsayıcı içindeki belirli bir dizin yolunda kullanılabilir olmasını sağlar. Birimin dosya sistemi ağacındaki her şey erişilebilir hale gelir. Birim verilerinde belirli alt dizinleri hariç tutmak istiyorsanız, bu bir zorluk oluşturabilir. Bu makalede, belirli yollardan kaçınırken birimleri monte etmek için basit bir teknik öğreneceksiniz.
Neden bunu yaptın?
Tüm birimi monte etme varsayılan davranışı normalde arzu edilir. Birimler, kapsayıcılar tarafından oluşturulan verileri depolamak için tasarlanmıştır, böylece içeriklerinin uygulamalarınızla alakalı olması gerekir.
Birimler, ana bilgisayar bağlama bağlantıları kullanılarak da doldurulabilir. Bunlar, makinenizdeki bir dizini doğrudan kapsayıcınızın içindeki bir yola eşler. Ana bilgisayar dizini içinde yapılan değişiklikler kapsayıcıya otomatik olarak yansıtılacaktır.
Bağlama bağlamaları, uygulama geliştirmeyi hızlandırmak için yaygın olarak kullanılır. Docker imajınızı yeniden oluşturmak zorunda kalmadan kaynak kodunu değiştirebilir ve değişikliklerinizi gözlemleyebilirsiniz. Proje çalışma dizinleri genellikle, yansıtılmasını istemediğiniz bazı klasörler içerir; node_modules
ve vendor.
Bunlar, görüntü oluşturma adımları sırasında doldurulan kapsayıcınızda zaten mevcut olabilir. Yerel klasörlerinizi bağlanmaktan hariç tutmak, görüntünüz tarafından sağlanan bağımlılıkları kullanarak kodunuzu güvenilir bir şekilde test etmenize olanak tanır.
Docker Birim Bağlantılarından Alt Dizinler Nasıl Dışlanır
Alt dizinler, basit bir teknik kullanılarak bir birim bağlamasından çıkarılabilir: yoksaymak istediğiniz yolda başka bir bağlama oluşturun. eğer montaj yapıyorsan ~/app
ile /opt/app
kapsayıcınızda hariç tutabilirsiniz ~/app/node_modules
dizine ikinci bir boş birim monte ederek /opt/app/node_modules
:
$ docker run --name app \ -v ~/app:/opt/app \ -v /opt/app/node_modules \ app-image:latest
Bu kapsayıcı, ana makinenizin içeriğiyle başlayacak ~/app
dizin erişilebilir /opt/app
. Yine de /opt/app/node_modules
barındırıcınızınki yerine temel resim tarafından sağlanan orijinal içeriği içerecektir. ~/app/node_modules
dizin.
Bu, Docker’ın yeni oluşturulan boş birimleri, bağlandıkları hedef yolun mevcut içeriğiyle otomatik olarak doldurması nedeniyle işe yarar. Eğer koşarsan npm install
Docker dosyanızın bir parçası olarak, /opt/app/node_modules
zaten tüm bağımlılıklarınızı içerecektir. İlk birim bağlama, ana bilgisayar dizininizi kapsayıcıya bağlar, ancak ikincisi, onu boş bir birim ile geçersiz kılar. /opt/app/node_modules
. Bu daha sonra görüntüde bulunan dosya ve klasörlerle doldurulur.
Birim bağlamalarınızın sırası önemlidir – alt dizin bağlamanın daha az spesifik ana bağlamadan sonra uygulanması gerekir. Aksi takdirde içeriği ~/app
sürümü de dahil olmak üzere node_modules
hariç tutmayı oluşturması amaçlanan boş birimi geçersiz kılacaktır.
Dosyaları Hariç Tutma
Tek tek dosyaları etkili bir şekilde dışlamak için benzer bir teknik kullanabilirsiniz. Ana bilgisayarınızın montajı /dev/null
dosya yoluna, içeriği yokmuş gibi boş bırakacaktır.
$ docker run --name app \ -v /dev/null:/opt/app/config.yaml \ app-image:latest
Bu yalnızca dosyaları hariç tutmak için çalışır – /dev/null
dizin yollarıyla eşleşmeyecek. Yöntem, temel görüntünüzdeki orijinal sürümü korurken bir dosyayı atlamak için de çalışmaz. Harita olacak /dev/null
yola, oradaki mevcut herhangi bir dosyayı değiştirerek.
Docker Compose’u Kullanma
Bu tekniklerin ikisi de Docker Compose ile çalışır. Hizmet tanımınızı ayarlayın volumes
normal bağlama bağlamanızı ve uygun bir boş birim geçersiz kılmayı dahil etmek için bölüm.
services: app: image: app-image:latest build: . volumes: - ~/app:/opt/app - /dev/null:/opt/app/config.yaml # Exclude file - /opt/app/node_modules # Exclude directory
Koşma docker-compose up
düz ile aynı etkiye sahip olacak docker run
yukarıda gösterilen örnek.
Özet
Docker birim bağlamaları, kapsayıcının hedef yolundaki her şeyi bağlı ana bilgisayar dizininin içeriğiyle değiştirir. Bazı durumlarda, belirli ana bilgisayar yollarının bağlanmasını hariç tutarak bu davranışı özelleştirmek isteyebilirsiniz.
Bu makalede, kapsayıcının içindeki bir alt dizine boş bir birim eklemenin ilk bağlamayı nasıl geçersiz kılacağını gördünüz. Kapsayıcı alt dizininin içeriği, resminiz tarafından sağlanan orijinal içeriğe geri dönecektir. Bu tekniğin bir varyasyonu dosyalar için de kullanılabilir, ancak yolun üzerine şunlar yazılacaktır: /dev/null
yerine.