Optimalizace Docker image

Už jsem tu psal o tom, že jsem si udělal image na statické weby a spouštění Python robotů. Oba dva image fungují bez problému, tak nebyl důvod do nich nějak zásadně zasahovat, nicméně mi i tak přišlo … „zbytečné“ … že na to, jak jednoduché úlohy mají plnit, dosahují poměrně zásadní velikosti. Image pro roboty měl přes 800MB, pro statické stránky skoro 183MB. V obou případech se bavíme o velikosti image bez aplikačních dat a v nezkomprimované podobě.

Začal jsem tedy pátrat, jak by bylo možné velikost image zmenšit a narazil na článek, kde rozebírali používání Alpine Linuxu, ze kterého výsledný image vychází. Už na první pohled je jasné, proč by měl být výsledek o poznání menší. Oficiální image Python 3.5 má sám o sobě 685MB a nginx skoro 183MB (jelikož moje jediná změna byla upravená konfigurace). Jenže na pozadí těchto image běží plnohodnotný systém (Debian Jessie), který si sám o sobě „řekne“ o 123MB z výsledného image. Oproti tomu má základ v podobě Alpine Linux necelé 4MB!

Samozřejmě člověk nemůže počítat s tím, že „na třech disketách“ dostane plnohodnotný systém se vším, co potřebuje. Ne, v základu systém neumí v podstatě nic a je do něj vše doinstalovat. Doinstalovat ale jen to, co skutečně budete ve výsledku potřebovat.

K instalací balíčků je třeba použít vlastní repozitář, ze kterého se instaluje pomocí apk. Pro ještě větší optimalizaci je dobré veškeré závislosti nainstalovat v jedné vrstvě:

A jak je na tom výsledek v porovnání se svými „tlustšími“ sourozenci? Nejlépe to asi ukazuje následující graf:

Image pro roboty (python-robots) se zmenšil o 87% na 106MB a pro nginx (static-site) ještě zásadněji o 95% na necelých 10MB. Veškerá funkčnost byla samozřejmě zachována.

Mohlo by se vám líbit...

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *