1981'de yayınlanan, Nailing Jelly to a Tree adlı bir kitap , yazılımı "belirsiz ve sağlam bir kavrayışa sahip olmak zor" olarak tanımlıyor. Bu 1981'de doğruydu ve o zamandan beri yaklaşık kırk yıl daha az doğru değil. İster satın aldığınız ister kendi oluşturduğunuz bir uygulama olsun, yazılımı dağıtmak, yönetmek ve çalıştırmak zor olmaya devam ediyor.
Docker kapsayıcıları, yazılımı kavramanın bir yolunu sağlar. Docker'ı, bir uygulamayı dağıtım ve çalıştırma zamanı sorunları - bir ağda nasıl açığa çıkarılır, depolama ve bellek kullanımı ve G / Ç kullanımı, erişim izinlerinin nasıl kontrol edileceği - ele alınacak şekilde paketlemek için kullanabilirsiniz. uygulamanın kendisinin dışında ve tüm "kapsayıcıya alınmış" uygulamalarda tutarlı olacak şekilde. Docker konteynerinizi, Docker çalışma zamanının yüklü olduğu işletim sistemi ile uyumlu herhangi bir ana bilgisayarda (Linux veya Windows) çalıştırabilirsiniz.
Docker, bu kullanışlı kapsülleme, izolasyon, taşınabilirlik ve kontrolün yanı sıra birçok başka avantaj da sunar. Docker kapsayıcıları küçüktür (megabayt). Anında başlarlar. Sürüm oluşturma ve bileşenlerin yeniden kullanımı için kendi yerleşik mekanizmaları vardır. Genel Docker Hub veya özel depo aracılığıyla kolayca paylaşılabilirler.
Bu makalede, Docker konteynerlerinin hem yazılım geliştirmeyi hem de dağıtmayı nasıl kolaylaştırdığını inceleyeceğim - kapsayıcıların ele aldığı sorunlar, bunları nasıl ele aldıkları, soruna ne zaman doğru yanıt oldukları ve ne zaman olmadıkları.
Docker kapsayıcılarından önce
Uzun yıllardır, kurumsal yazılım tipik olarak ya "çıplak metal" (yani, temeldeki donanım üzerinde tam kontrole sahip bir işletim sistemine kurulmuş) veya bir sanal makinede (yani, temeldeki donanımı paylaşan bir işletim sistemine kurulmuş) dağıtılmıştır. diğer "konuk" işletim sistemleriyle). Doğal olarak, çıplak metal üzerine kurulum, yazılımın hareket etmesini acı verici bir şekilde ve güncellenmesini zorlaştırdı - BT'nin iş ihtiyaçlarındaki değişikliklere çabuk yanıt vermesini zorlaştıran iki kısıtlama.
Sonra sanallaştırma ortaya çıktı. Sanallaştırma platformları ("hipervizör" olarak da bilinir), birden çok sanal makinenin tek bir fiziksel sistemi paylaşmasına izin verdi; her sanal makine, kendi işletim sistemi, depolama alanı ve G / Ç ile birlikte tüm sistemin davranışını izole bir şekilde taklit ediyor . BT artık iş gereksinimlerindeki değişikliklere daha etkili bir şekilde yanıt verebilir, çünkü VM'ler talebi karşılamak veya kaynakları korumak için klonlanabilir, kopyalanabilir, taşınabilir ve yukarı veya aşağı döndürülebilir.
Sanal makineler de maliyetleri düşürmeye yardımcı oldu, çünkü daha fazla VM daha az fiziksel makinede konsolide edilebilirdi. Daha eski uygulamaları çalıştıran eski sistemler sanal makinelere dönüştürülebilir ve daha fazla para tasarrufu için fiziksel olarak devre dışı bırakılabilir.
Ancak sanal makinelerin hala kendi sorunları var. Sanal makineler büyüktür (gigabayt) ve her biri tam bir işletim sistemi içerir. Yalnızca çok sayıda sanallaştırılmış uygulama tek bir sistemde birleştirilebilir. Bir sanal makinenin sağlanması hala oldukça zaman alıyor. Son olarak, VM'lerin taşınabilirliği sınırlıdır. Belirli bir noktadan sonra, sanal makineler hızlı hareket eden işletmelerin talep ettiği hız, çeviklik ve tasarrufları sağlayamaz.
Docker kapsayıcısının avantajları
Kapsayıcılar biraz VM'ler gibi çalışır, ancak çok daha spesifik ve ayrıntılı bir şekilde. Tek bir uygulamayı ve bağımlılıklarını (uygulamanın çalıştırması gereken tüm harici yazılım kitaplıkları) hem temeldeki işletim sisteminden hem de diğer kapsayıcılardan izole ederler. Kapsayıcıya alınmış uygulamaların tümü tek, ortak bir işletim sistemini (Linux veya Windows) paylaşır, ancak bunlar birbirlerinden ve genel olarak sistemden bölümlere ayrılır.
Docker konteynerlerinin faydaları birçok yerde kendini gösterir. Docker ve container'ların bazı önemli avantajları şunlardır:
Docker, sistem kaynaklarının daha verimli kullanılmasını sağlar
Kapsayıcıya alınmış uygulamaların örnekleri, sanal makinelere göre çok daha az bellek kullanır, daha hızlı başlar ve durur ve ana bilgisayar donanımlarında çok daha yoğun bir şekilde paketlenebilirler. Tüm bunlar BT'ye daha az harcama yapmak anlamına geliyor.
Maliyet tasarrufu, hangi uygulamaların oyunda olduğuna ve kaynakların ne kadar yoğun olabileceğine bağlı olarak değişecektir, ancak kapsayıcılar her zaman VM'lerden daha verimli çalışır. Aynı iş yüklerini çalıştırmak için daha az sayıda işletim sistemi örneğine ihtiyacınız olduğundan, yazılım lisanslarının maliyetlerinden de tasarruf etmek mümkündür.
Docker, daha hızlı yazılım teslim döngüleri sağlar
Kurumsal yazılım, değişen koşullara hızla yanıt vermelidir. Bu, hem talebi karşılamak için kolay ölçeklendirme hem de işletmenin gerektirdiği yeni özellikler eklemek için kolay güncelleme anlamına gelir.
Docker kapsayıcıları, yeni iş özellikleriyle birlikte yazılımın yeni sürümlerini hızla üretime koymayı ve gerekirse önceki bir sürüme hızla geri dönmeyi kolaylaştırır. Ayrıca mavi / yeşil dağıtımlar gibi stratejilerin uygulanmasını kolaylaştırırlar.
Docker, uygulama taşınabilirliğini etkinleştirir
Kurumsal bir uygulamayı nerede çalıştırdığınız önemlidir - işleri yakın ve güvende tutmak için güvenlik duvarının arkasında; veya kolay genel erişim ve kaynakların yüksek esnekliği için genel bir bulutta. Docker konteynerleri, bir uygulamanın çalıştırması gereken her şeyi (ve yalnızca bu şeyleri) kapsadığından, uygulamaların ortamlar arasında kolayca taşınmasına izin verir. Docker çalışma zamanının yüklü olduğu herhangi bir ana bilgisayar (bir geliştiricinin dizüstü bilgisayarı veya bir genel bulut örneği) bir Docker konteyneri çalıştırabilir.
Docker, mikro hizmet mimarisi için parlıyor
Hafif, taşınabilir ve bağımsız Docker konteynerleri, ileri görüşlü hatlar boyunca yazılım geliştirmeyi kolaylaştırır, böylece yarının sorunlarını dünün geliştirme yöntemleriyle çözmeye çalışmazsınız.
Yazılım kalıpları konteynerlerinin daha kolay hale getirdiği uygulamalardan biri, uygulamaların birçok gevşek bağlı bileşenden oluşturulduğu mikro hizmetlerdir. Mikro hizmetler, geleneksel, "monolitik" uygulamaları ayrı hizmetlere ayırarak, bir iş kolu uygulamasının farklı bölümlerinin ayrı ekipler tarafından ve farklı zaman çizelgeleri tarafından ölçeklendirilmesine, değiştirilmesine ve hizmete sunulmasına izin verir. iş.
Kapsayıcılar, mikro hizmetleri uygulamak için gerekli değildir, ancak mikro hizmetler yaklaşımına ve genel olarak çevik geliştirme süreçlerine mükemmel şekilde uygundurlar.
Docker konteynerlerinin çözmediği sorunlar
Kaplar hakkında akılda tutulması gereken ilk şey, herhangi bir yazılım teknolojisi için geçerli olan tavsiyenin aynısıdır: Bu sihirli bir değnek değildir. Docker konteynerleri tek başına her sorunu çözemez. Özellikle:
Docker, güvenlik sorunlarınızı çözmeyecek
Bir konteynerdeki yazılım, varsayılan olarak çıplak metal üzerinde çalışan bir yazılımdan daha güvenli olabilir, ancak bu, kapıları kilitli bir evin, kapıları açık olan bir evden daha güvenli olduğunu söylemek gibidir. Mahallenin durumu, bir hırsızı cezbeden değerli eşyaların görünür varlığı, orada yaşayan insanların rutinleri vb. Hakkında hiçbir şey söylemiyor. Kapsayıcılar bir uygulamaya bir güvenlik katmanı ekleyebilir, ancak yalnızca bağlam içinde bir uygulamanın güvenliğini sağlamaya yönelik genel bir programın parçası olarak.
Docker, uygulamaları sihirli bir şekilde mikro hizmetlere dönüştürmez
Mevcut bir uygulamayı kapsayıcıya alırsanız, bu, kaynak tüketimini azaltabilir ve dağıtılmasını kolaylaştırabilir. Ancak , uygulamanın tasarımını veya diğer uygulamalarla nasıl etkileşimde bulunduğunu otomatik olarak değiştirmez . Bu avantajlar, yalnızca geliştiricinin zaman ve çabasıyla sağlanır, yalnızca her şeyi kapsayıcılara taşıma zorunluluğu değildir.
Eski usul, monolitik veya SOA tarzı bir uygulamayı bir konteynere koyun ve sonunda bir konteynırda eski bir uygulama elde edersiniz. Bu, onu işiniz için daha yararlı hale getirmez; eğer bir şey olursa, onu daha az kullanışlı hale getirebilir.
Docker, sanal makinelerin yerini almaz
Kalıcı bir konteyner efsanesi, VM'leri geçersiz kılmasıdır. Bir VM çalıştırmak için kullanılır Birçok uygulama olabilir bir kap içine taşınacak, ancak anlamına gelmez bütün bunların can veya gerektiği. Örneğin, ağır düzenleme gereksinimleri olan bir sektördeyseniz, VM'ler konteynerlerden daha fazla izolasyon sağladığından, konteynerleri VM'ler için değiştiremeyebilirsiniz.
Docker kapsayıcıları için durum
Kurumsal geliştirme çalışmaları, saklanmak ve değişime yavaş tepki vermekle ünlüdür. Kurumsal geliştiriciler her zaman bu tür kısıtlamalara - BT tarafından getirilen sınırlamalara, genel olarak işletme tarafından bunlardan kaynaklanan taleplere - karşı gelir. Docker ve kapsayıcılar, geliştiricilere arzuladıkları özgürlüğü sağlarken, aynı zamanda değişen iş koşullarına hızla yanıt veren iş uygulamaları oluşturmanın yollarını da sağlar.