Docker'ın veritabanları için kullanılmaması nedenleri nelerdir?


25

Docker'ın kullanım durumları hakkında bir arkadaşımla tartıştım . Takımdaki bir adam Docker'ı her şey için kullanmak istiyor - bir tür evrensel unix işlem sarmalayıcısı gibi. Diğerleri ise Docker'ın yalnızca Microservices ve AWS Lambda tarzı uygulamalar gibi durumsuz uygulamalar için kullanılması gerektiğini düşünüyor .

Her ikisi için de kavram kanıtı tasarladık. Docker kümemizde Docker ana bilgisayarı monte edildiğinde takılan paylaşılan bir sürücümüz var ve eğer bir kapta bir Veritabanı monte edilmişse, paylaşılan sürücüye bir birim monte ediyor.

Aksi deliller gösterilmesine rağmen arkadaşım hala kendi konumuna bağlı kalıyor. (Ayrıca Docker'ın yığına karmaşıklık ekleyerek gereksiz risk eklediğini de savunuyor .)

Hem empati yapıp hem de onunla daha iyi bir sebepten dolayı onun bakış açısını dinlemeye ve anlamaya çalışıyorum. (Hepimiz gayet iyi anlaşıyoruz - bu yüzden jest ve ciddi tartışmaların bir karışımı).

Sorunun arkasındaki sorunun türü şudur: veritabanları sığır mıdır? Bu yorum , veritabanınız için iyi bir otomatik yedekleme ve alma stratejisinin bir sığır sunucusundan ayırt edilemez olduğunu göstermektedir.

Sorum şu: Docker'ın veritabanları için kullanılmamasının sebepleri nelerdir?

EDIT: İnsanlar benden terminolojimi aydınlatmamı istediler. Veri tabanı uygulamasının konteynerde olduğunu ve depolama biriminde olduğunu varsayıyordum. Demek istediğim, RDBMS'nin konteynerde olduğu ve veritabanı deposunun birimde olduğu idi.

Bazı yorumcular, liman işçisi birim sürücülerinin veritabanı ile iyi çalışmayacağını öne sürdüler. (Ya da bu etki için bir şey). Lütfen bunu genişletir misiniz?



Bu blogun yazarına göre, bulut sağlayıcılar yönetilen veritabanları sundukları için konteynerlerin içinde veritabanları çalıştırılmamalıdır.
030

Yanıtlar:


20

İnsanlar Docker'da bir veritabanı çalıştırma hakkında konuşurken, verileri bir kapta saklamak anlamına gelmez; DB yazılımıyla bir docker görüntüsüne sahip olmaktan ve verileri bir birim olarak monte etmekten bahsediyorlar (bir cilt hacmi değil, bir cilt hacmi).

Hacimler Docker'ın önemli bir parçasıdır ve lapa lapa ya da sadece takip edilen bir şey değildir. Docker, yalnızca durumsuz (mikro) hizmetler için yapılmaz .

Keşke yapabilsem, Docker'da bir veritabanı çalıştırmamak için teknik bir sebep bulamıyorum , bu yüzden ne yazık ki argümanın diğer tarafını seçeceğim ve bu yüzden size aradığınız cevabı vermeyeceğim.

(Örnek olarak Oracle'ı kullanıyorum, çünkü hem çıplak metal hem de kenetlenmiş, aşina olduğumdan ve varsayılan ayarları geçtiğinizde kullanması biraz önemsiz olmasından dolayı oldukça ünlü bir canavar.)

  • DB yazılımının kendisini bir kapta paketlemek size her zaman aynı faydaları sağlar - her yerde aynı sürüme sahip olmak, bağımlılık / paylaşılan kütüphane sorunlarından kaçınmak, aynı DB'yi geliştirici dizüstü bilgisayarlarda veya ihtiyaç duyduğunuz yerde döndürmek.
  • Bir yerde çalıştırmak için bir çırpıda ; güncelleme önemsiz vb. Tüm Docker avantajları uygulanır. Dockerhub'da çalışan bir DB'yi bir veya üç dakika içinde döndürmenize olanak tanıyan bir Oracle görüntüsü var (ve elbette diğerleri için de).
  • İnsanlar performans testleri yaptılar ve hacimler ve çıplak metal arasında hiçbir G / Ç farkı bulamadılar ( https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/ , https: // stackoverflow .com / sorular / 21889053 / docker konteynerinin çalışma zamanı-performans-değeri-nedir ).
  • Kaputun altında, Docker bir şekilde tüm G / Ç'leri engellemiyor gibiydi. Sadece standart Linux araçları ile yaratıcılık kazanıyor (bu durumda bağları bağlar, Docker-fu'yu mümkün kılan iç çekirdek tablolarını yönetir).
  • Açıkçası bu, DB'nin iki örneğini çalıştırabileceğiniz ve sadece aynı dosyalar üzerinde çalışmalarını sağlayabileceğiniz anlamına gelmez, ancak kimse bunu ima etmiyor. Docker size otomatik olarak eşzamanlı ve sihirli bir şekilde hacme erişim sağlamaz ve asla böyle davranmadı. Avantajların geri kalanı hala geçerlidir. DB'nizin kendisi bu gibi çatışmaları algılamıyorsa, birim zaten kullanımdayken ikinci bir kabın dönmesini reddeden bir CMD komut dosyası daha iyi sağlarsınız.
  • Konteynırın çevrilmesi / kapatılması (sadece basit bir metal DB sunucusunu kapatmamanız gibi) konusunda biraz daha dikkatli olmalısınız, ancak bu oldukça kolay yönetilebilir olmalıdır.

Şimdi, koşullara bağlı olarak, yapmamak için yumuşak nedenler olabilir :

  • Örneğin, Oracle (şirket), RDBMS'lerini bir Docker konteynerinde çalıştırırsanız, sizi kesinlikle desteklemeyecektir. Fakat belki de, geliştiricilere ve test ortamına yönelik, her durumda desteğine ihtiyaç duymayacağınız, çıplak bir metal üretim sunucusu için sakladığınız dockized Oracle RDBMS görüntüleri kullanıyorsunuzdur. (Ancak lisanslarınızı ödemeyi unutmayın ...).
  • Operasyon görevlileri Docker'ı tanımıyorlarsa, yanlışlıkla her şeyi öldürmek, veri dosyalarınızı vb. Yok etmek biraz daha kolay olabilir.
  • Eğer çok hızlı adanmış SAN depolama büyük miktarda zaten büyük adanmış metal DB makineleri, var ve başka zaten hiçbir şey çalışıyorsa, o zaman sadece ambalajlamasını için Docker kullanmanın hiçbir noktası olacağını olanlar sen gibi asla sadece zaman başka bir sunucuyu dönüşünü orada 100 GB veya hatta TB veridir. Sonuçta, üretim için, Oracle gibi bir RDBMS tüm çoğaltma, veri bütünlüğü, kesinti süresiz çalışma yerine çalışma vb. Konularda çok ileri düzeydedir. Bu argümanın sadece " RDBMS'nizi saklamaya gerek yok" dediğini unutmayın. Bu "Sen demiyor olmamalı bunu" - belki sen kaplarda üzerinden veya hayal olabilir diğer Sebebi ne olursa olsun veritabanı yazılım yükseltmelerini sunmaya istedikleri için bunu yapmak istiyorum.

Al işte ozaman, buyur. Elbette do (sonsuza müteşekkir olacaktır) senin geliştiriciler ve test ortamları için en azından senin DB dockerize. Prodüksiyonda, tadına bakacak ve en azından orada , özel DBA / Ops ile en iyi oturan çözümü tercih edeceğim - eğer onlarca yıl boyunca çıplak metal DB sunucuları çalışma tecrübesi varsa, o zaman elbette ki onlara güveniyorlardı. devam etmek için. Ama yine de bulutta tüm BT'ye sahip olan bir girişim olursanız, bir Docker kabı tüm resimde sadece bir parça soğan olur.


Diğer bir etken, alternatifin kendinize ait bir hosting sunucusu vs yönettiği bir DB servisi kullanıyor olmasıdır.
avi

3

Bu konuda derinlemesine yazdım ama işte özeti:

  • Bölünmüş beynin önlenmesi (birden fazla ana düğümü seçerek) çözülmesi gerekir. Bunu yapmamak felaket olabilir

  • Tüm verilerinizi kaybetmeden veritabanlarının bir durumda kapatılmasını ve bir başkasına getirilmesini sağlamak için üretime hazır paylaşılan depolama çözümleri yoktur.


Teşekkürler - bu neredeyse mantıklı bir cevap. Ancak blog postanıza - en üste yazdığım varsayımını doğrulayan bir uyarı ekleyin. "Aşağıda ortaya konan sorunlar, veritabanınızı yalnızca dock'ta paylaşılan depolama alanı olmadan veya otomatik olarak farklı bir düğümde başlatma yeteneği olmadan çalıştırma ile ilgili değildir." Yani - blog postanız yukarıda yazdığım durumun geçerli olduğunu söylüyor.
Hawkeye

Sorunuzdan db'ye başlamak ve birimi bağlamak için bir tür düzenleme kullandığınız görülüyor. Ama sonra bahsettiğim düzenleme ile ilgili potansiyel bir tutarlılık probleminiz var. Hiçbir uyarıda bulunmadığınız zaman açıkça ihmal edişim var.
Robo

Flynn.io'yu gördün mü? Sözde üretime hazır oldukları ve (Joyent Manatee'ye dayanan) bir chorum durum makinesi kullanarak bölünmüş beyin senaryolarından kaçınıldıklarını düşünüyorlar.
Alix Axel,

Bu noktaların hiçbiri Cassandra veya diğer dağıtık veritabanları için geçerli değildir, ancak hala bir kapta çalıştırmanın iyi bir fikir olduğunu düşünmüyorum.
dres

0

Verilerin bir docker kabına monte edildiğini söylerken, "veritabanının" docker kabına monte edildiğini söylemek daha doğru olmaz mı? Verileriniz kabın dışında kalıyorsa, veritabanınızı bir kaba koymamak için "doğru" bir şey yapıyorsunuz demektir.

Tabii ki, bir konteynere bir DBMS koyarak dışarıda sakladığınız verileri yönetmesine izin vererek şehre gidin, şahsen bence bu sadece iyi bir tasarım çünkü mantık ve veriler arasında temiz bir ayrım tutar. Ancak, verilerinizi bir kaba koyduğunuzda, potansiyel olarak ateşle oynarsınız.

Konteynır depolama sürücüleri uzun bir yol kat etmiş olsa da, şahsen henüz verilerimi bir konteynere dalmaya ve bırakmaya hazır değilim.

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.