Mam Dockerfile
zbudować obraz Dockera oparty na systemie Alpine Linux. Teraz muszę zainstalować pakiet w ramach tego Dockerfile
.
Obecnie mam:
RUN apk update && \
apk upgrade && \
apk add git
Najwyraźniej jest to zły pomysł, ponieważ wynik jest niedeterministyczny. Zamiast tego zależy to od momentu, w którym zbuduję obraz, którą wersję git
instaluję.
Jaki jest właściwy sposób to zrobić?
Myślę, że muszę powiedzieć updated
, upgrade
i add
które wersje w użyciu, ale jak mam to zrobić?
Widziałem, że apk
obsługuje przypinanie repozytoriów, ale nie tego chcę (przynajmniej tak mi się wydaje), ponieważ nie chcę przypinać repozytorium, ale pakiet.
Innymi słowy: Gdyby git
można było zainstalować przez npm
, byłbym w stanie uruchomić:
npm install [email protected]
(lub jakąkolwiek wersję chcę mieć). Co to jest równoważne z Alpine Linux?
źródło
apk add ansible~=2.4.1
znaczeniu>=2.4.1 <2.5.0
. Sprawdź jubianchi.github.io/semver-check, aby przetestować własne zakresy.Obecnie nie ma możliwości zainstalowania dowolnych starszych wersji pakietu z oficjalnych repozytoriów w Alpine Linux. Najlepszą rzeczą, jaką możesz osiągnąć, jest użycie repozytoriów wcześniejszych wersji:
źródło
Ponieważ korzystałem z
testing
repozytorium. Skończyłem budować własną kopię. Kroki:Przejdź do szczegółów paczki. Dawny:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Kliknij zatwierdzenie, kliknij łącza pliku APKBUILD i „Log” w menu, aby uzyskać dziennik zatwierdzenia pliku APKBUILD. Następnie wybierz zatwierdzenie dla pliku APKBUILD i pobierz go. Dawny:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Zainstaluj narzędzia do kompilacji:
Nie musisz być
root
użytkownikiem, więc utwórzpackager
użytkownika z hasłem:Następnie skompiluj go jak
packager
w tym samym katalogu, co plik APKBUILD:Konieczne może być wykrycie błędów i zainstalowanie zależności. W moim przykładzie musiałem to zrobić na moim istniejącym obrazie Docker jako
root
:Po udanej kompilacji jako
packager
zainstaluj ją jakoroot
:Nie jestem pewien, jak usunąć
--allow-untrusted
część, ale kroki zadziałały dla mnie.źródło