Dziś przeglądałem plik "Dockerfile" z pewnego projektu.
W źródłach znalazłem:
RUN apk add libpng-dev libwebp-dev freetype-dev libpng-dev libpq-dev
[...tutaj build...]
RUN apk del libpng-dev libwebp-dev freetype-dev libpng-dev libpq-dev
Da się to zrobić lepiej i łatwiej 🧵 ↓
Jeśli korzystasz z Alpine jako bazy dla obrazu kontenera, to pakiety możesz instalować z opcją "--no-cache".
Tworzysz obraz, który ma być możliwie mały — po co Ci trzymanie na dysku ściągniętych paczek?
RUN apk add --no-cache [tutaj lista paczek]
Druga sprawa, do duplikowanie kodu.
Na początku Dockerfile masz listę np. 30 paczek niezbędnych przy kompilacji, a na końcu masz... tę samą listę, ale do odinstalowania (aby zmniejszyć rozmiar obrazu).
Pod względem efektów, jest to OK, ale pojawia się pewien problem...
Jeśli zauważysz, że brakuje Ci jakiejś paczki, musisz dopisać ją w dwóch miejscach Dockerfile jednocześnie. To generuje zbyteczną pracę i daje szansę na wpadkę (coś instalujesz, ale zapominasz odinstalować).
Na Alpine Linux paczki można grupować za pomocą przełącznika "--virtual".
Na tak utworzonej paczce można później łatwiej operować.
RUN apk add --no-cache --virtual cli-tools wget curl netcat-openbsd
[...operacje...]
RUN apk del cli-tools
Po parametrze "--virtual" podana jest nazwa, która będzie określać Twój zestaw paczek. U mnie to jest "cli-tools".
Nazwa jest dowolna i równie dobrze może nazywać się "reksio" - jeśli tak akurat potrzebujesz ;)
W kolejnym kroku usuwam taką 'paczkę', odwołując się do jej nazwy.
Jeśli zależy Ci na mocnym ograniczeniu wielkości obrazu, to możesz (niekiedy) pokusić się o zastosowanie multi-stage buildów, gdzie jeden z kontenerów używany jest do budowania aplikacji, a drugi zawiera już tylko czystą wersję aplikacji.
Nie zawsze da się to zastosować.
Istnieje szansa, że pomyślisz "Eeeej! chyba każdy to wie!".
No więc nie każdy 😃
Widziałem już tyle Dockerfile tworzonych metodą copy/paste (te same paczki na początku i końcu pliku), że jestem przekonany, że znajdą się osoby, dla których będzie to nowość usprawniająca pracę.
Jak już o kontenerach mowa, to trzeba je mieć gdzie stawiać.
Jeśli ma to być Twoje środowisko developerskie, to rzuć okiem na Mikrusa.
mikr.us
To serwer VPS zachowujący rozsądny stosunek między ceną i jakością.