Docker depolama sürücüsünü adım adım anlama

Yansıtmanın katmanlı özellikleri

Docker dosya sisteminden bahsetmeden önce bir problem hakkında düşünmemiz gerekiyor. Docker'ın başlatılmasının imaja bağlı olduğunu biliyoruz, docker başlamadan önce imajı çekip sonra başlatması gerekiyor. Aynı görüntü ile birden fazla kap başlatılabilir. Öyleyse soru şu: Bu kaplar aynı görüntüyü mi paylaşıyor yoksa görüntüyü kopyalayıp bağımsız olarak mı çalıştırıyorlar?

Her konteynerin bu görüntünün bir kopyasına sahip olduğunu ve ardından her birinin bağımsız olarak çalıştığını varsayıyoruz, bu da, çok sayıda görüntünün kopyalanması gerektiği kadar çok sayıda konteynerin başlatıldığı anlamına geliyor.Bu büyük bir alan israfı olduğuna şüphe yok. Aslında konteynerin tasarımında aynı İmaj ile başlatılan tüm konteynerler kopyalamak yerine imajı paylaşmaktadır. Sonra şu soru ortaya çıkıyor: Tüm konteynerler bu görüntüyü paylaştığına göre, herhangi bir konteynerde yaptığım değişiklikler diğer konteynerlerde göründüğü için değil mi? Bir kap bir yapılandırma dosyasını A olarak değiştirmek isterse ve başka bir kap da dosyayı B olarak değiştirmek isterse, iki kapsayıcı çakışır mı?

Yukarıdaki soruyu bir kenara bırakalım, önce aşağıdaki ayna çekme örneğine bakalım:

root @ ubuntu: ~ # docker pull nginx Varsayılan etiketi kullanma: en son en son: Kitaplıktan / nginx'ten çekiliyor be8881be8156: Çekme tamamlandı 32d9726baeef: Çekme tamamlandı 87e5e6f71297: Çekme tamamlandı Özet: sha256: 6ae5dd1664d46b98257382fd91b50e332da989059482e2944aaa41ae6cf8043a Durum: nginx için daha yeni resim indirildi: en son

Yukarıdaki örnek, docker resmi ayna havuzundan bir nginx: en son görüntüyü çekmektir.Görüntüyü çekerken katman katman çekildiğini görebilirsiniz. Aslında, görüntü disk katmanında katman katman depolanır. Genellikle bir uygulama görüntüsü aşağıdaki gibi birden çok katman içerir:

Öncelikle aynalamanın salt okunur olduğunu açıkça belirtmemiz gerekiyor. Her katman salt okunurdur. Yukarıdaki resimde, çekirdeğin üstünde, alt katmanın temel bir görüntü katmanı olduğunu görebiliyoruz.İşte ubuntu'nun temel bir görüntüsü. Görüntünün salt okunur özelliği nedeniyle, ubuntu'nun bu temel görüntüsü üzerinde olmak istiyorsak Bir emacs düzenleyicisinin yüklenmesi, yalnızca temel görüntünün üzerine yeni bir görüntü katmanı oluşturabilir. Aynı şekilde, mevcut emacs mirror katmanının üstüne bir apache eklemek istiyorsanız, bunun üzerine sadece yeni bir mirror katman oluşturabilirsiniz. Ve bu, aynalamanın katmanlı doğasıdır.

Konteyner okuma-yazma katmanı nasıl çalışır?

Yansıtmanın hiyerarşik özelliklerinden bahsettiğimizde, yansıtmanın salt okunur olduğundan bahsetmiştik. Aslında, bir konteyneri başlatmak için bir ayna kullandığımızda, aslında konteynırın içinde istediğimiz gibi okuyup yazabiliyoruz.Sonuçtan, aynanın salt okunur özelliğine aykırı görünüyor.

Yukarıdaki resme bakmaya devam ediyoruz aslında aynanın en üst katmanında bir okuma-yazma katmanı olduğunu görebiliyoruz. Bu okuma-yazma katmanı, konteyner başlatıldığında mevcut konteyner için ayrı olarak monte edilir. Her konteyner çalışırken, mevcut görüntüye bağlı olarak üst katmanına bir okuma-yazma katmanı yerleştirecektir. Konteyner üzerindeki tüm kullanıcı işlemleri okuma ve yazma katmanında tamamlanır. Kap yok edildiğinde, bu okuma-yazma katmanı da yok edilir.

Bilgi noktaları: kapsayıcı = ayna görüntüsü + okuma-yazma katmanı

Bu okuma-yazma katmanı için operasyonlarımız temel olarak iki yönteme dayanmaktadır: yazma üzerine kopyalama ve zaman alan ayırma.

Yazarken kopyala

Tüm sürücülerin yazma üzerine kopyalama (CoW) tarafından kullanılan teknoloji. CoW, yazma üzerine kopyalamadır, yani yalnızca yazılması gerektiğinde kopyalanabilir Bu, mevcut dosyalar için bir değişiklik senaryosudur. Örneğin, bir görüntüye dayalı olarak birden fazla Kapsayıcı başlatılırsa, görüntüyle aynı bir dosya sistemi her bir Kap için tahsis edilirse, çok fazla disk alanı kaplar. CoW teknolojisi, tüm konteynerlerin görüntünün dosya sistemini paylaşmasına izin verir ve tüm veriler görüntüden okunur Sadece dosya yazılacağı zaman, yazılacak dosya değişiklik için görüntüden kendi dosya sistemine kopyalanır. . Dolayısıyla aynı görüntüyü kaç konteyner paylaşırsa paylaşsın, yazma işlemi görüntüden kendi dosya sistemine kopyalanan kopya üzerinde gerçekleştirilir ve görüntünün kaynak dosyası değiştirilmez ve birden çok konteyner işlemi aynıdır. Bir dosya, her bir kabın dosya sisteminde bir kopya oluşturur ve her kap, birbirinden izole edilmiş ve birbirini etkilemeyen kendi kopyasını değiştirir. CoW kullanmak disk kullanımını etkili bir şekilde iyileştirebilir.

Zaman yapılandırması

Zaman tahsisi, orijinal olarak böyle bir dosyanın olmadığı senaryolarda kullanılır ve alan yalnızca yeni bir dosya yazılacağı zaman tahsis edilir, bu da depolama kaynaklarının kullanımını iyileştirebilir. Örneğin, bir kabın başlatılması, bu kap için bir miktar disk alanını önceden ayırmaz, ancak yalnızca yeni dosyalar yazılırken gerektiğinde yeni alan tahsis eder.

Docker depolama sürücüsü

Şimdi bu katmanlı görüntülerin diskte nasıl saklandığından bahsedelim.

Docker, görüntüleri farklı şekillerde depolamak için çeşitli depolama sürücüleri sağlar. Yaygın olarak kullanılan birkaç depolama sürücüsü şunlardır:

  • AUFS

  • OverlayFS

  • Cihaz Haritacısı

  • Btrfs

  • ZFS

AUFS, OverlayFS ve Devicemapper hakkında konuşalım:

AUFS

AUFS (Başka Bir UnionFS), dosya düzeyinde depolama sürücüsü olan bir Union FS türüdür. AUFS, bir veya daha fazla mevcut dosya sistemini şeffaf bir şekilde kaplayabilen, birden çok katmanı dosya sisteminin tek katmanlı bir temsilinde birleştiren katmanlı bir dosya sistemidir. Basitçe ifade etmek gerekirse, aynı sanal dosya sistemi altındaki dosya sistemine farklı dizinlerin bağlanmasını destekler. Bu dosya sistemi, dosyaları katman katman yığınlayabilir ve değiştirebilir. Aşağıdaki kaç katman salt okunur olursa olsun, yalnızca en üstteki dosya sistemi yazılabilir. Bir dosyanın değiştirilmesi gerektiğinde, AUFS dosyanın bir kopyasını oluşturur, dosyayı salt okunur katmandan değiştirilmek üzere yazılabilir katmana kopyalamak için CoW kullanır ve sonuç da yazılabilir katmanda saklanır. Docker'da, alttaki salt okunur katman görüntüdür ve yazılabilir katman da Konteyner'dir. Yapı aşağıdaki şekilde gösterilmektedir:

OverlayFS

Kaplama, Linux çekirdeği 3.18'den sonra desteklenir ve aynı zamanda bir Union FS türüdür.Çok katmanlı AUFS'nin aksine, Overlay yalnızca iki katmana sahiptir: Docker'ın görüntü katmanını ve kap katmanını temsil eden bir üst dosya sistemi ve bir alt dosya sistemi. Bir dosyayı değiştirmeniz gerektiğinde, dosyayı değiştirmek için salt okunur alttan yazılabilir üst kısma kopyalamak için CoW kullanın; sonuç ayrıca üst katmana kaydedilir. Docker'da, alttaki salt okunur katman görüntüdür ve yazılabilir katman da Konteyner'dir. Şu anda en son OverlayFS, Overlay2'dir. Yapı aşağıdaki şekilde gösterilmektedir:

Cihaz Haritacısı

Cihaz mapper, Linux kernel 2.6.9'dan sonra desteklenir.Mantıksal cihazlardan fiziksel cihazlara haritalama için bir çerçeve mekanizması sağlar.Bu mekanizma altında, kullanıcılar ihtiyaçlarına göre depolama kaynak yönetimi stratejilerini kolayca geliştirebilirler. Daha önce bahsedilen AUFS ve OverlayFS, hem dosya düzeyinde depolamadır hem de Aygıt eşleyici blok düzeyinde depolamadır.Tüm işlemler, dosyalar üzerinde değil, doğrudan bloklar üzerinde gerçekleştirilir. Aygıt eşleyici sürücüsü, önce blok aygıt üzerinde bir kaynak havuzu oluşturur ve ardından kaynak havuzunda bir dosya sistemi ile temel bir aygıt oluşturur.Tüm aynalar, bu temel aygıtın anlık görüntüleridir ve kapsayıcı, aynanın anlık görüntüsüdür. Bu nedenle, kapsayıcıda görülen dosya sistemi, kaynak havuzundaki temel aygıtın dosya sisteminin anlık görüntüsüdür ve kapsayıcı için alan ayrılmamıştır. Yeni bir dosya yazılacağı zaman, yeni bir blok tahsis edilir ve konteynerin imajında ona veri yazılır, bu, çağrıldığında tahsis edilir. Mevcut bir dosyayı değiştirmek istediğinizde, konteyner anlık görüntüsü için blok alanı tahsis etmek üzere CoW kullanın, değiştirilecek verileri konteyner anlık görüntüsündeki yeni bloğa kopyalayın ve ardından değiştirin. Aygıt eşleyici sürücüsü, varsayılan olarak görüntüleri ve kapsayıcıları içeren bir 100G dosyası oluşturacaktır. Her konteyner, kendi başına yapılandırılabilen ve ayarlanabilen bir 10G hacmiyle sınırlıdır. Yapı aşağıdaki şekilde gösterilmektedir:

Yaygın olarak kullanılan depolama sürücülerinin karşılaştırması

AUFS VS OverlayFS

AUFS ve Overlay, ortak dosya sistemleridir, ancak AUFS birden çok katmana sahipken, Overlay yalnızca iki katmana sahiptir, bu nedenle, dosya büyükse ve daha düşük katmanlar varsa, yazma üzerine kopyalama işlemleri yaparken AUSF daha yavaş olabilir. Ve Overlay linux çekirdek ana hattına dahil edilmiştir, AUFS bunu yapmaz. Şu anda AUFS temelde ortadan kaldırılmıştır.

OverlayFS VSDevice eşleyicisi

OverlayFS, dosya düzeyinde depolamadır ve Aygıt eşleyici, blok düzeyinde depolamadır. Dosya çok büyük olduğunda ve değiştirilen içerik küçük olduğunda, Overlay, değiştirilen içeriğin boyutuna bakılmaksızın tüm dosyayı kopyalar. Büyük dosyaları değiştirmek, küçük dosyalardan daha pahalıya mal olur. Zaman ve blok düzeyinde, ister büyük bir dosya ister küçük bir dosya olsun, dosyanın tamamı değil, sadece değiştirilmesi gereken bloklar kopyalanır Bu senaryoda, aygıt eşleyici açıkça daha hızlıdır. Blok seviyesi doğrudan mantıksal diske erişim olduğu için, IO-yoğun senaryolar için uygundur. Karmaşık dahili programlar, büyük eşzamanlılık ancak daha az IO içeren senaryolar için, Kaplama performansı nispeten daha güçlüdür.

OFF-WHITE x Nike henüz satın almadı mı? Vans hemen bir şeyler yapmaya geldi!
önceki
S8 oksijen tankı yorumu, takım savaşı birçok kez kaybedildi ve ortağın rahatlaması netizenleri güldürdü
Sonraki
Hayal gücünün ötesinde hız: OnePlus 6 uygulamalı deneyim
Audi, 5 yılda 6 yeni yerli enerji aracı piyasaya sürüyor
ZooKeeper'ın tipik uygulama senaryolarını gösterin
Yeezy hala bir çift insan ayağı mı giyiyor? Size yeni Yeezy numaralarını nasıl giyeceğinizi söyleyin!
İki yıl sonra, "Kar Kraliçesi" tekrar geri döner ve her kızın sahip olduğu prenses rüyasını yeniden yazar.
Acura'nın yeni TLX'inin yaklaşık 234.000 yuan denizaşırı bir fiyata satılacağı ortaya çıktı.
Elektrifikasyon trendi altında, büyük otomobil şirketlerinin Los Angeles Otomobil Fuarı'nda nasıl "güzellik için yarıştıklarını" görelim.
Tencent King Card'ın yeni dönem avantajları ortaya çıktı, Red Magic Mars satın alın ve telefon faturalarında 468 yuan'a kadar kazanın
Kardeşin kız kardeşi Eling Park çöpleri topluyor ve bir saat boyunca çok çalışıyor, "sonuç" ideal değil
Yerli olarak üretilen SP litografi makinesi nerede?
Kan efsanesinin BUG'si devam ediyor mu? Chen Tianqiao iyi bir elini mi kırdı? Shanda 30 milyon oyuncunun kalbini soğutuyor
Hayal gücünün ötesinde hız: OnePlus 6 uygulamalı deneyim
To Top