Optymalizacja obrazu Dockera

0

Czesc, chce utworzyć algorytm do optymalizacji obrazu dockera na OS Linux. Pierwsze co mi przyszło na myśl to przygotowanie go do wyszukiwania wspólnych cech różnych obrazów i z nich budowania obrazów bazowych. Myślicie ze to dobry pomysł?, Moze macie przydatne rady, sugestie jak do tego podejść?

0

A co dokładnie chcesz to osiągnąć?

Przecież jak masz obrazy które mają wspólną bazę, to docker współdzieli ich warstwy.

0

@Klaudia Balicka:

Pierwsze co mi przyszło na myśl to przygotowanie go do wyszukiwania wspólnych cech różnych obrazów i z nich budowania obrazów bazowych

Przecież na tej zasadzie działa docker

0

chce aby przy tworzeniu obrazu dockera nie pobierał od nowa wszystkich paczek tylko sprawdzil i wykorzystał te które już są na systemie operacyjnym, aby ich nie duplikowal, dzięki czemu zmniejszy się rozmiar obrazu dockera.

0

@Klaudia Balicka: Założeniem konteneryzacji jest, aby każdy kontener był odrębnym od środowiska na którym został uruchomiony.
Poza tym jeżeli chcesz współdzielić paczki to kontener dockerowy musiałby posiadać
taką samą konfigurację jak środowisko na którym on działa czyli jeżeli masz np. Ubuntu 20.04 jako host OS
to kontener dockerowy też musiałby hulać na 20.04 bo inaczej jakaś część paczek mogłaby nie działać.
Zatem to rozwiązanie działałoby tylko w bardzo wąskim zakresie przypadków, inaczej nadal jesteś zmuszona
pobierać paczki.

0

na jakim systemie operacyjnym? na hoście? To tak nie zadziała, przecież dockera możesz odpalić na Debianie, a obraz jest na Alpine, tam paczki/binarki nie będą kompatybilne.

Poza tym czy coś pobierze się z neta czy "zduplikuje" (że niby z hosta) to i tak trafi ostatecznie na obraz.

Po to robisz obraz dockera, żeby wszystko wymagane do odpalenia aplikacji było już w obrazie.

Ale generalnie widzę u Ciebie podstawowe niezrozumienie dockera - optymalizacja rozmiaru obrazu to moim zdaniem krok na kiedyś - na razie naucz się samego dockera czy idei systemu operacyjnego.

1

Ludzie nie umieją z dokera korzystać...

Jak robi się obrazy dokerowe to zawsze ma sie hierarchie:

  • Stockowy image z Linuxem
  • Firmowy image na bazie poprzedniego pod konkretną technologię np. JVM
  • Bazowy image pod konkretny serwis jeżeli wymaga zależności zewnętrznych typu clib'y lub inne native.
  • Image z binarkami skompilowanej usługi.

Dzięki takiemu podziałowi tworzenie obrazu ostatniego poziomu jest ultra szybkie (dorzucamy jar'ek i już). Podczas gdy 3 pierwsze etapy mogą być bardzo kosztowne np. ktoś może sobie toolkit do tworzenia pdf'ów instalować lub jakieś custom liby do obliczeń numerycznych co zawsze długo trwa.

Im większa firma i większe potrzeby tym drzewo obrazów będzie bardziej skomplikowane.

0

Bez sensu IMO. Jak ktoś naprawdę chce zoptymalizować rozmiar obrazu to:

  • idzie w distroless /alpine/ inne podobne rozwiązania
  • buduje swój kod w taki sposób, żeby zajmował mało miejsca np. statycznie buildy, odchudzone bazowe obrazy (dla interpretowanych języków jak Python/Java), flagi kompilatora zmniejszające rozmiar
  • dba o odchudzony rozmiar wszystkich zewnętrznych zależności
  • umie używać multistage buildów i generalnie wszystkiego co sprawia, że końcowy obraz nie zawiera śmieci

Rozwiązanie z szukaniem części wspólnych ma sens, ale to łagodzenie objawów a nie leczenie choroby

Klaudia Balicka napisał(a):

chce aby przy tworzeniu obrazu dockera nie pobierał od nowa wszystkich paczek tylko sprawdzil i wykorzystał te które już są na systemie operacyjnym, aby ich nie duplikowal, dzięki czemu zmniejszy się rozmiar obrazu dockera.

To robisz multi stage build i do ostatecznego obrazu kopiujesz to co jest konieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1