İçeriğe geç

Çözümler · Konteynerler

Docker için ne kadar sunucu gerekir?

Konteynerler küçük sanal makineler değil, tek bir çekirdeği paylaşan süreçlerdir; daemon yaklaşık 100 MB kullanır ve bundan sonrası yalnızca sizin kendi süreçlerinizdir. Bu yüzden cevap, sorunun beklediğinden daha küçüktür: bir proxy, bir uygulama, bir veritabanı ve bir önbellek birlikte yaklaşık 515 MB eder; bu da $12.90 fiyatlı BD-8 üzerinde rahatça sığar.

Bir konteyner gerçekte ne kadar kaynak tutar

Kıyaslama değil, aralıklar

İmajınız, yapılandırmanız ve trafiğiniz bu değerleri herhangi bir tablodan daha çok etkiler. Kendi yığınınızda docker stats çalıştırın: sizin için geçerli olan tek sayı odur.

Yaygın konteyner iş yükleri için tipik yerleşik bellek
KonteynerTipik bellekBD-8 üzerinde sığar (8 GB)
Bir ters proxynginx, Caddy, Traefik15–60 MB129 üst sınırda
Küçük bir web uygulamasıNode, Python, Go: tek süreç60–200 MB38 üst sınırda
PostgreSQL veya MySQLküçük veri kümesi, varsayılan havuz200–500 MB15 üst sınırda
Redisönbellek olarak, maxmemory ile sınırlı20–200 MB38 üst sınırda
Bir JVM hizmetiJava, Kotlin, Elasticsearch500–2000 MB3 üst sınırda

Hesap

Her plan neyi kaldırır

Bellekten işletim sistemi için 300 MB ve daemon için 100 MB çıkarılır, kalan konteynerlerinizin kullandığı miktara bölünür. Ortadaki sütun, yaklaşık 515 MB'lık eksiksiz bir yığındır: proxy, uygulama, veritabanı, önbellek.

Plan başına konteyner ve yığın kapasitesi, disk ve canlı fiyatlarla
PlanRAMTam yığınlarKüçük uygulamalarDiskFiyatOluştur
VPS-11 GB1325 GB$9.90Oluştur
BD-88 GB1538100 GB$12.90Oluştur
BD-1212 GB2359200 GB$17.90Oluştur
BD-2424 GB46120300 GB$31.90Oluştur

Disk ikinci sürprizdir ve insanların daha sonra karşılaştığı sorundur: imajlar, volume'ler ve loglar sessizce birikir. docker system prune komutunu iş acil hale gelmeden önce, sonra değil, haftalık bir cron'a ekleyin.

Kendimize karşı

Bunu ne zaman satın almamalısınız

Yönetilen bir konteyner platformu, işletimi üstlendiği için daha pahalıdır. Bu, satın almaya değer gerçek bir hizmettir.

Bir VPS size root erişimi verir ve güncellemeleri, yeniden başlatmaları, sertifikaları ve nöbeti size bırakır. Bu çok daha ucuzdur ve gerçekten daha fazla iş demektir. Bu işi istemiyorsanız dürüst cevap yönetilen bir platformdur; yamalanmamış bir daemon'un internete açık halde terk edildiği bir makine satmaktansa sizi oraya yönlendirmeyi tercih ederiz. Aynı tavsiyenin iki küçük parçası: her konteynere bir bellek sınırı koyun ki sorun çıkaran konteyner veritabanınız yerine kendisi kapansın ve tek bir makinede Kubernetes'e yönelmeyin; planlayacak hiçbir şeyi olmayan bir orkestratör yalnızca karmaşıklıktır.

Sorular

Satın almadan önce sorulanlar.

Docker'ın kendisi ne kadar RAM kullanır?
Çok az ve insanları şaşırtan kısım da bu. Docker daemon yaklaşık 100 MB tutar ve ondan sonraki her konteyner yalnızca bir süreçtir: sanal makinede olduğu gibi ikinci bir işletim sistemi, ikinci bir çekirdek ya da konteyner başına sabit bir maliyet yoktur. Dolayısıyla hesap basittir: makinenizin belleğinden işletim sistemi için yaklaşık 300 MB ve daemon için 100 MB çıkarın, kalanı gerçekten çalıştırdığınız süreçler arasında paylaştırın.
Küçük bir VPS kaç konteyner çalıştırabilir?
Sorunun ima ettiğinden daha fazla, çünkü "bir konteyner" bir boyut birimi değildir. On ters proxy ile tek bir Elasticsearch birbirinden çok farklı makinelerdir. BD-8 üzerinde ($12.90 fiyatına 8 GB) bir proxy, bir web uygulaması, bir veritabanı ve bir önbellek birlikte yaklaşık 515 MB eder; bu da makinenin büyük kısmını boş bırakır. Yukarıdaki tablo bu bölmeyi yapar; size gerçekten uyan rakam için kendi yığınınızda `docker stats` çalıştırın.
VPS, yönetilen bir konteyner platformundan daha ucuz mu?
Fiyat açısından neredeyse her zaman evet, ama karşılaştırmanın tamamı bu değil. Bir platform işletimi üstlendiği için daha fazla ücret alır: güncellemeler, yeniden başlatmalar, sertifikalar, gece 3'teki nöbet. Bir VPS size root erişimi verir ve bunların hepsini size geri bırakır. Konteyner çalıştırmak istiyor ve bu işi üstlenmeye hazırsanız VPS çok daha ucuzdur. İstemiyorsanız platforma ödeme yapın; bunu söylemeyi, üzerinde yamalanmamış bir daemon ile terk edilecek bir makine satmaya tercih ederiz.
Docker Swarm veya Kubernetes gerekir mi?
Tek makinede hayır. Tek bir sunucuda yaşayan bir yığın için Compose yeterlidir ve kendi sunucunuzda barındırılan kurulumların ezici çoğunluğu için doğru cevaptır; bir orkestratörün işi makineler arasında planlama yapmaktır ve tek makinede planlanacak bir şey yoktur. Kubernetes'e, gerçekten birkaç makineniz ve bu karmaşıklık için bir nedeniniz olduğunda başvurun, öncesinde değil.
İlk ne tükenir: bellek mi, CPU mu, disk mi?
Genellikle bellek ve gürültülü biçimde tükenir: çekirdeğin bellek yetersizliği sonlandırıcısı (OOM killer) bir süreç seçip sonlandırır; bu da bir konteynerin gizemli biçimde yeniden başlaması gibi görünür. Konteyner başına bellek sınırları koyun ki sorun çıkaran, veritabanınız değil, kendisi olsun. Disk ikinci sürprizdir: imajlar, volume'ler ve loglar sessizce birikir, bu yüzden `docker system prune` iş acil hale gelmeden çok önce haftalık bir cron'a eklenmelidir.
Sunucuda hangi imaj çalışmalı?
Herhangi biri; her plan her imajı çalıştırır ve Docker hepsinde çalışır. Bir tercihiniz yoksa varsayılan olarak Ubuntu LTS'i seçmeye değer, çünkü konteyner belgelerinin çoğu onu varsayar. Dağıtım, olması gerektiği gibi hissettirdiğinden çok daha az önemlidir: konteynerler kendi kullanıcı alanlarını getirir, bu yüzden ana makine bir çekirdek ve bir daemon'dan pek fazlası değildir.