Liman işçisi hacim konteyneri ve liman işçisi hacmi arasında nasıl karar verilir?


24

Belgeleri okuduktan sonra, üretken uygulama / hizmet verilerinin en iyi şekilde nasıl yönetileceği konusunda kendimi biraz şaşırttı.

3 seçenek var gibi görünüyor:

  1. Basitçe birim dizini ana bilgisayar dizinine eşleyin (yani, -vargümanı docker run)
  2. Veriler için bir liman işçisi konteyner görüntüsü oluşturun (yani ayrı konteyner ve --volumes-from)
  3. Liman işçisi birimi oluşturma (yani docker volume create)

Şimdi, kabul edilen uygulamanın seçenek # 2 olduğu anlaşılıyor, ama sonra merak ediyorum # 3'ün amacı ne?

Özellikle bu senaryoları nasıl doğru şekilde ele alıyorsunuz docker volumeve bir veri hacmi konteyneri mi yoksa her durum için mi kullanmak daha iyi?

  • Sunucunuzdaki ayrı bir birimde ve / veya depolama katmanında uygulama verilerine ihtiyacınız var
  • Yedekleme
  • Verileri geri yükleme


@MichaelHampton Sorumu tekrar ifade etmem gerektiğini anladım
dukeofgaming 2

# 1 üretim için ciddi bir seçenek değildir; eğer bir alternatif varsa, temelde asla yapılmamalıdır.
Michael Hampton

2
@MichaelHampton Neden ?, veriler sabitlenmemiş olabilir, ancak ana işletim sistemi hala izleyen ve yedekleyen bir altyapı ekibi tarafından yönetiliyor
dukeofgaming

@dukeofgaming btrfs scrubZarar görmüş dosyaları bulmak ve düzeltmek için üzerinde çalıştırabileceğinizden bahsetmeyin . Yerleşik malzemelerin nasıl çalıştığından emin değilim ama sanırım veri bozulmasına karşı koruma sağlamaz, bu yüzden sadece dosyaları geri yüklemek yerine kötü bir şey olursa her zaman tam bir geri yüklemeye ihtiyaç duyarım. Başka bir soyutlama katmanı eklediği düşüncesiyle dosya okumayı ve yazmayı daha da yavaşlatıyor. Her nasılsa # 2 ve # 3'ün avantajlarını göremiyorum, ancak liman işçisi ile deneyimli değilim, bu yüzden bu değişebilir.
inf3rno

Yanıtlar:


18

# 2 ve # 3'ün hemen hemen aynı şey olduğunu düşünüyorum, asıl fark, # 3 ile durmuş bir kabın olmaması (kelimenin tam anlamıyla, sadece adlandırılmış bir cilt). Örneğin, adlandırılmış bir birim oluşturabilir ve benzer şekilde # 2 ile yapacağınız şeyi de yapabilirsiniz -v.

Adlandırılmış bir birim oluşturun:

$ docker volume create --name test

Bir birimden bu birime bazı veriler ekleyin ve yazın:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

Daha sonra aynı testbirimi başka bir kaba monte edebilir ve verileri okuyabilirsiniz:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

Buradaki avantaj, yalnızca veri kabını kaldırırsanız, birimin yanlışlıkla kaybolmamasıdır. Şimdi onu docker volumealt komutla yönetiyorsunuz .

$ d volume ls
DRIVER              VOLUME NAME
local               test

Aynı zamanda yol boyunca ses seviyesi sürücülerine yönelik olanakları da açar, böylece ana bilgisayarlar arasında paylaşılan birimler yapabilir (örneğin, NFS üzerindeki birimler). Bunun örnekleri Flocker ve Convoy olabilir . Özellikle verilerin taşınması veya yedeklenmesiyle ilgili olarak, Convoy, verileri yedeklemek için belirli alt komutlara sahiptir ve ana makinenizin dışındaki NFS veya EBS'de depolamaya izin verir.

Bu nedenle, daha yeni bir okul yolunun (Docker 1.9+) yalnızca veri içeren bir konteyner yerine adlandırılmış bir birim kullanmak olduğunu düşünüyorum.


Teşekkürler, sorularımın çoğuna cevap verdiniz, ancak konteyner verilerini farklı bir fiziksel cilt katmanında yönetme konusundaki nokta hala cevapsız ve bu da kritik olanı ... sanırım bunun bir git repo yönetim çözümü olduğunu ve kabın o kısmına ihtiyacım olduğunu varsayalım. farklı bir fiziksel ana bilgisayar biriminde (yani başka bir bölüm, fiziksel disk ya da her neyse) bulunan Tier 0 deposundaki veri (docker dosyasında tanımlanan bir birimdir)
dukeofgaming

Ben tür hacim sürücülerin söz ile yaptı. Şu anda, verileri fiziksel yerel depolama sürücüsünün dışında depolamak için, özellikle yapmak istediğiniz şeyi yapan bir tane kullanmanız gerekir. Kafamın üstünden github.com/rancher/convoy ve github.com/ClusterHQ/flocker var . Convoy şu anda NFS ve GlusterFS'yi destekliyor ve şu anda neyin peşinde olduğunuza daha yakın geliyor. Bunu açıklığa kavuşturmak için cevabı değiştireceğim.
Andy Shinn

Devicemapper sürücüsünü kullanarak soruma cevap veriyor gibi görünüyor! docs.docker.com/engine/userguide/storagedriver/…
dukeofgaming

the volume won't accidentally disappear if you remove the data-only container. Ayrıntılı misiniz? Teşekkürler.
Stephane

22

Docker 1.9'dan itibaren, Birimler API'si ( docker volume create --name mydata) ile Adlandırılmış Birimler oluşturma Veri Birim Konteyneri yerine tercih edilir. 2016 yılı Şubat ayından itibaren, Docker'ın belgeleri çok titiz. Docker’daki kişiler, Veri Hacim Kaplarının “ artık önerilen bir kalıp olarak kabul edilmediğini ”, ““ adlandırılmış birimlerin çoğu (hepsinde değilse) durumlarda yalnızca veri hacimlerini değiştirebilmesi gerektiğini ”ve“ kullanmam için bir neden görmüyorlar ”diyor. sadece veri konteynerleri . ”

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.