Docker intermediate containers

Peker Mert Oksuz
YazılımPortal
Published in
1 min readNov 8, 2016

--

Docker ile otomatize edilmis build pipeline’lariniz varsa ve bunlari jenkins gibi bir CI tool ile yonetiyorsaniz buyuk ihtimalle gunde onlarca kez image build ediyorsunuzdur. Ancak jenkins slave’lerinize baktiginizda birden bire kaynagi belirsiz dead container’lar olustugunu farketmis olabilirsiniz. Eger bu container’larin nereden geldigini bilmiyorsaniz yazimda sizin icin kisaca deginecegim.

Bu container’lar dockerfile’da yazdigimiz her run komutu icin build islemi sirasinda olusuturulur ve basarili bir sekilde calistigi takdirde kendiliginden silinir. Ancak build islemi sirasinda run komutu fail olursa, ki bu komut genellikle deterministik olarak calismasi garanti edilemez, bu komutun icra edildigi container docker-deamon tarafindan silinmez. Bu container aslinda image build ederken neden fail oldugumuzu debug edebilmek icin birakilir.

Bu container ile ilgili docker build parametrelerine goz atarsak iki rm secenegi goruyoruz.

— force-rm Always remove intermediate containers
— rm Remove intermediate containers after a successful build (default true)

Default ayarlarimizda docker deamon basarili bir image build isleminden sonra isi biten tum intermediate container’lari temizlemekte. Ancak image build sirasinda bir hata olursa build sirasinda olusturulan container silinmeden oylece birakilir. CI tool’lar gibi birden cok docker build isleminin gunde defalarda yapildigi bir ortamda bu container’lar zamanla siser ve container kirliligi olusturur. Bu nedenle jenkins’te yapilan build’ler icin zaten console log’da yeterli build bilgisi zaten mevcut oldugundan force-rm yapmak oldukca makul bir islem gibi gorunuyor (fikirlerinize acigim). Build komutlarimiza force-rm parametresini ekleyerek fail durumlarinda olusabilecek docker container’lar build’in sonlanmasiyla birlikte temizlenmis olur.

--

--