Czy ktoś mógłby wyjaśnić, co robi polecenie apt-get update i kiedy naprawdę powinienem go użyć?
apt-get update
pobiera zaktualizowane indeksy z repozytoriów pakietów dystrybucji, wymieniając wszystkie dostępne pakiety i ich dokładne wersje.
Typowe dystrybucje, takie jak Ubuntu i Debian, są zwykle konserwatywne i kompatybilne wstecz w swoich pakietach, więc wersje nie zmienią się zbytnio z czasem; zmienią się one z powodu aktualizacji zabezpieczeń lub poprawek błędów. Na przykład mysql można zaktualizować z 5.7.18
do, 5.7.19
ale nie do 6.x
.
Gdzie jest przechowywany indeks pakietu? W bazie danych? Na plik?
Zazwyczaj jest przechowywany w jednym lub kilku plikach /var/lib/apt
. W kontekście Dockera pliki te znajdują się w obrazie. Podczas tworzenia pliku Docker są one zapisywane w nowych warstwach systemu plików, które są tworzone i zachowywane jako nowo zbudowany obraz.
Co się stanie, jeśli wykonam instalację apt-get bez aktualizacji pamięci podręcznej?
Możesz spróbować pobrać wersje pakietów, które już nie istnieją. Jest to dość powszechne na maszynach wirtualnych, ale jest również możliwe w kontenerach, jeśli repozytoria dystrybucji wydały nowe pakiety po zbudowaniu obrazu podstawowego. Pomiędzy opiekunami dystrybucji i opiekunami plików Dockerfile, które znajdują się poniżej dystrybucji, może nie być koordynacji. Jest tylko jedno repozytorium Debiana, ale tysiące jessie
obrazów kontenerów i Dockerfile.
Co więcej, niektóre obrazy nadrzędne, takie jak Ubuntu One, usuwają pobrany indeks, aby zmniejszyć obraz i uniknąć nieaktualnych plików. Oczekuje się, że zaktualizowany indeks powinien zostać pobrany podczas budowania na obrazie podstawowym, a nie dla każdej wersji obrazu podstawowego dostarczanego z najnowszym indeksem.
Czy istnieje szansa, że zdalny pakiet już nie będzie istniał, a łącze zostanie zerwane?
Zdecydowanie, ponieważ wersje przechowywane w indeksie są bardzo precyzyjne, podobnie jak 5.7.19
(uproszczenie; są bardziej podobne do 5.7.19-0ubuntu1
).
Czy istnieje jakaś uzgodniona polityka dotycząca repozytoriów debat? Na przykład, czy repozytorium powinno zawierać tylko ostatnią wersję pakietu, czy wręcz przeciwnie, czy powinno zawierać wszystkie wersje dostępne dla konkretnego wydania dystrybucyjnego?
Często zdarza się, że stare niewielkie wersje są szybko usuwane, gdy dostępna jest aktualizacja; Zakładam, że pozwala to zaoszczędzić miejsce na serwerach, ponieważ pliki binarne mogą ważyć kilkadziesiąt megabajtów, pomnożone przez wszystkie obsługiwane wersje i architektury. Tak więc zazwyczaj niemożliwe jest przypięcie, powiedzmy, mysql-5.7.18
następnego apt-get install
; jak tylko mysql-5.7.19
zostanie wydany w dystrybucji, poprzedni zostanie usunięty.
Aby być uczciwym wobec Dockera, ten niedeterminizm apt-get update
jest zagadnieniem poruszanym w ramach zarządzania pakietami każdej dystrybucji. Ten sam problem miałbyś przy próbie zbudowania powtarzalnej maszyny wirtualnej EC2 lub Vagrant.
Niektórzy administratorzy systemu używają usług, takich jak Aptly, do tworzenia kopii lustrzanych oryginalnych repozytoriów i możliwości przypięcia określonej wersji, ale istnieje ryzyko pominięcia aktualizacji zabezpieczeń, chyba że masz często uruchamiany osobny proces testowania aktualizacji i zmiany tego, co przypinają.