Docker İpucu #2: Neden “latest” İmaj Kullanmamalısınız?
Docker container’ları ile çalışırken, bazen yeni imajları denerken, bazen de kendi projelerimizin güncel hallerini çekip onlar üzerine container kuruyoruz. Herhangi özel bir etiket belirtmediğimizde, Docker varsayılan olarak “latest” yazılı imajı çekmeye başlıyor. Birçok ortamda da bu imajların son sürüme ait olduğunu düşünüyor. Container oluştururken yine sürüm belirtmezsek bu imaj çalıştırılıyor. Ancak bu şekilde, yani latest etiketine sahip imajların çalıştırılması önerilmiyor ve bazı riskler içeriyor.
Problem #1: Neden Kullanmayalım? Ne Zararı Olur?
Docker ile imaj build ederken, eğer bir etiket(tag) belirtmezsek varsayılan olarak latest etiketi ekleniyor. Ancak bu bir zorunluluk değil. Yani Docker, bizim etiket verdiğimiz imajlara otomatik olarak latest gibi bir etiket eklemiyor. Dolayısıyla, bizim ürettiğimiz imajlarda bir tag sistemi kullanıyorsak, biz latest’i açıkça söylemediğimiz müddetçe imajlarda latest etiketi oluşmuyor. Bu noktada sorun olan ise, imajı üreten kişinin belki aylar/yıllar önce latest etiketi ile ürettiği imajlar, birçok kişinin aklında son sürüm ve en güncel imajmış gibi yer ediniyor.
Hatta bazı imajlarda, latest etiketi hiç bulunmayabiliyor. Böyle durumlarda imaj var olmasına rağmen latest etiketi olmadığı için hata almaya başlıyoruz. Mesela aşağıdaki imajın hiç latest etiketi bulunmuyor:
<figcaption>docker imaj etiketler</figcaption></figure>
Peki Ne Yapmalıyız? Latest Yerine Hangi İmajı Kullanmalıyız?
Latest imajları kullanmak yerine, Docker Hub veya kullandığınız benzer bir ortamdan etiketleri kontrol edip, amacımıza uygun bir tanesini seçmemiz gerekiyor. Örnek olarak:
</figure>
Problem #2 Başka Neden Kullanmayalım? Ne Zararı Olur?
Birinci sebebe göre daha büyük olan, tespiti de bazen çok zor olabilen bir problem daha var. Bazen kullandığımız uygulama imajlarını güncellemek istiyoruz. Böyle durumlarda, özellikle orkestrasyon sistemleri içerisinde uygulamayı çalıştıracak olan sunucular, “latest” kullandığımızda o etikete sahip bir imaj zaten üzerlerinde olduğu için tekrar indirme gereği duymuyor. Bu yüzden uygulama eski imajla tekrar açılıyor.
Peki Ne Yapmalıyız? Latest Yerine Hangi İmajı Kullanmalıyız?
Bunun en kolay çözümü ise farklı imaj etiketleri kullanmak. Bu sayede, etiket değiştiğinde bütün sunucular kendi üzerlerinde ilgili versiyonun olmadığını görecek ve gidip o imajı indirmeye başlayacak.
Kubernetes gibi sistemlerde alternatif olarak, ImagePullPolicy ile de bu sorunu çözmek mümkün. Ama yine de, latest kullanmamakta ve kafa karışıklığı oluşturmamakta fayda var.