Çakışan bazı küçük bölgeler olsa da Docker ve Debian paketleme sistemleri aslında iki farklı sorunu çözüyor :
Debian paketleme sistemi, yazılımı bir ana bilgisayara yüklemek ve mümkün olduğunca kolay bir şekilde yükseltmek için tasarlanmıştır. “Yazılım X sürüm A, sürüm B veya daha yeni bir sürüm yüklü Y yazılımı gerektirir” veya “yazılım X asla Z yazılımı C sürümüyle kurulmamalıdır” gibi yazılım bileşenleri arasında karmaşık bağımlılık ve kısıtlama kalıplarını işleyebilir.
Docker sistemi, hizmetleri, özellikle mikro hizmetleri, muhtemelen birkaç ana bilgisayarda, örneğin bir Docker sürüsü veya bir Kubernetes kümesi gibi kolayca tanımlamak ve dağıtmak üzere tasarlanmıştır.
Bu iki problem aslında diktir, yani çözülecek konuşlandırma problemi göz önüne alındığında, çözümün bir parçası olarak bunlardan biri, her ikisi de, hatta hiçbiri kullanılabilir. Her ikisini de kullanırken, Debian paketi Docker görüntüsünün üretiminde kullanılır ve Dockerfile öğeniz (bir kapta “sanallaştırılmış sistemi” açıklayan Docker görüntüsünü hazırlamak için kullanılan tarifler) esasen Debian deponuzu Debian paketleme sisteminin kaynakları ve paketinizi kurun.
Bunu göz önünde bulundurarak, bana göre gerçekten aradığınız şey değişmez sunucu kalıbını uygulamak. Bulut teknolojilerindeki son gelişmeler, klasik yazılım yükseltme sistemini bir yazılım paket sisteminden (Debian paketleme sistemi gibi) kullanarak değil, tüm sunucuyu aynı anda değiştirerek yazılımın yükseltilmesini mümkün kıldı. (Bazı kişiler bu geliştirmeden önce, sunucuda üç işletim sistemi, iki cihazı çalıştırmak için alternatif olarak kullanılan ve cihaz değiştirme işlemini gerçekleştirmeye adanmış bir mini işletim sistemi kullanarak bunu yaptı. Aşırı karmaşık olmasa da, bu her zaman ) Bu teknik sizin için ilgi çekici olabilir, çünkü paket yöneticisini kullanarak sunucunuzdaki yazılımı yükseltmek için kullanılırsanız, sunucunun son durumu sunucunun "yükseltme geçmişine" bağlıdır - özellikle de hatalar oluşursa yükseltme işlemi. Bu heterojenlik kötüdür,
Sahada binlerce kutu var. Paket bağımlılıklarını, süreç kaydını vb. Değişen derecelerde bir deb paketi aracılığıyla yönetiyoruz.
bununla ilgili olabilir. Değişmez sunucu modeli bu hata kaynağını “yükseltme geçmişi” kavramını problemden yok ederek siler.
Şimdi değiştirilemeyen sunucu desenini uygulamak için çeşitli seçenekler var, iki popüler seçenek Docker görüntülerini, görüntülerini kullanmak veya bulut sağlayıcınızdan “ana örnek görüntüleri” kullanmaktır (bunlara AWS'de AMI'ler ve Google Compute Engine'de yalnızca Özel Görüntüler denir) . Kullanım durumunuz bulut tabanlı tekniklerin kullanımını yasaklar, bu nedenle Docker görüntülerini tek uygun seçenek olarak kabul edeceğim. (Tamamlama uğruna Docker'a alternatif olarak Virtual Box veya benzeri bir sanallaştırma çözümü kullanmak gibi diğer yaklaşımları kullanmak kesinlikle mümkündür.)
Değişmez sunucu modeli tekniğini kullanırken, sunucunuzu temsil eden yeni bir artefakt (Docker görüntüsü) sunarsınız ve bu artefakt da test edilebilir ve servis yükünün yanı sıra üretim ayarlarınızı doğru bir şekilde kopyalayan bir kurulum elde etmek çok kolaydır.
Şimdi açıkladığınız somut problemi düşünmek için, Docker ile değişmez sunucu desenini uyguladığınızı varsayalım. Docker sistemi ve Debian paketleme sistemi birbirini dışlayan (cf. intro) yerine tamamlayıcı olduklarından, yazılımınız için bir Debian paketi hazırlamanız gerekip gerekmediğini sormak zorundayız.
Yazılımınızı yüklemek için bir Debian paketi kullanmanın uygunluğu (Docker görüntüsünde veya bir ana bilgisayarda) çözmeniz gereken sürüm oluşturma sorununun karmaşıklığında yatar. Aynı anda yazılımınızın çeşitli sürümlerini çalıştırıyorsanız, zaman zaman sürüm düşürmeniz ve dikkatle belgelemeniz gereken karmaşık sürüm gereksinimleriniz varsa, Debian paketine sahip olmak şarttır. Aksi takdirde, bu adım atlanabilir - ancak bu paketleri üretmek ve dağıtmak için zaten çaba harcadığınızdan, işinizi atmanın gerçek bir değeri yoktur. Bu nedenle Debian paketlerinizi üretmeye devam etmenizi öneririm.