Tavsiye, İşletim sistemi düzeyinde sanallaştırma hedefinden ve tasarımından gelir.
Konteynerler, kendi kullanıcı alanını ve dosya sistemini vererek başkaları için bir işlemi izole etmek üzere tasarlanmıştır .
Bu, mantıksal evrimin chroot
izole edilmiş bir dosya sistemi sağlamasıydı, bir sonraki adım belleğin üzerine yazmaktan kaçınmak için işlemleri diğerlerinden izole etmek ve aynı kaynağı (örneğin, TCP port 8080) çakışma olmadan çoklu işlemlerden kullanmaya izin vermek oldu.
Kapsayıcıya olan ilgi, sürüm çatışmalarından endişe duymadan süreç için gerekli kütüphaneyi paketlemektir. Aynı kullanıcı alanında ve dosya sisteminde aynı kitaplığın iki sürümüne ihtiyaç duyan çoklu işlemleri gerçekleştirirseniz, her bir işlem için en az LDPATH ayarlaması yapmanız gerekir, böylece uygun kitaplık ilk önce bulunur ve bazı kitaplıklar bu şekilde çimdiklenemez. Yolları derleme zamanında çalıştırılabilir kodlarda kodlanmış olduğundan, daha fazla ayrıntı için bu SO sorusuna bakın.
Ağ düzeyinde, aynı bağlantı noktalarını kullanmaktan kaçınmak için her işlemi yapılandırmanız gerekir.
Aynı kapta birden fazla işlem çalıştırmak, biraz fazla ince ayar yapılmasını gerektirir ve günün sonunda, aynı kullanıcı alanı içinde birden çok işlemi yürütmek tamamsa, aynı dosya sistemini ve ağ kaynaklarını paylaşırken, neden bunları çalıştırmıyorsanız, yalıtma amacını yenin konağın kendisi?
İşte düşünebileceğiniz ağır tweaking / tuzaklar listesi olmayan ayrıntılı listesi:
Günlükleri kullanma
Ya monte edilmiş bir hacme sahip olmak ya da stdout'a serpiştirmek bu biraz yönetim sağlar. Eğer monte edilmiş bir hacim kullanıyorsanız, kabınız ana bilgisayar üzerinde kendine ait bir "yere" sahip olmalıdır, yoksa aynı kaynak için iki aynı konteyner mücadele eder. docker logs
Kaynaklardan kolayca anlaşılamıyorsa, faydalanmak için stdout'a girerken analiz için bir kabusa dönüşebilir.
Zombi işlemlerinden sakının
Bir konteynır kazasında yaptığınız işlemlerden biri, süpervizörün çocukları zombi durumunda temizleyemeyebilir ve ev sahibi init bunları asla devralmayacaktır. Bir kere kullanılabilir pids (2 ^ 22 yaklaşık 4 milyon) tükendiğinde bir sürü şey başarısız olur.
Endişelerin ayrılması
Bir apache sunucusu ve aynı kapsayıcıdaki logstash gibi iki ayrı şey çalıştırırsanız, günlük işlemeyi kolaylaştırabilir, ancak logstash'ı güncellemek için apache'yi kapatmanız gerekir. (Gerçekte, Docker'ın günlük sürücüsünü kullanmalısınız) Geçerli oturumların bitmesini beklememek zarif bir duraklama olur mu? Zarif bir duraksa, biraz zaman alabilir ve yeni sürümü piyasaya sürmesi uzun sürebilir. Bir öldürme yaparsanız, kullanıcıları bir günlük göndereni için etkileyeceksiniz ve bu IMHO'dan kaçınılması gerekir.
Sonunda, birden fazla işleminiz olduğunda, bir işletim sistemi üretiyorsunuzdur ve bu durumda bir donanım sanallaştırması kullanmak bu ihtiyaca göre daha fazla ses çıkarır.