Certains pourraient-ils expliquer ce que fait la commande apt-get update et quand je devrais vraiment l'utiliser?
apt-get update
télécharge les index mis à jour à partir des référentiels de packages de la distribution, répertoriant tous les packages disponibles et leurs versions précises.
Les distributions communes comme Ubuntu et Debian sont généralement conservatrices et rétrocompatibles dans leurs offres de paquets, donc les versions ne changeront pas beaucoup au fil du temps; ils changeront en raison de mises à jour de sécurité ou de corrections de bogues. Par exemple, MySQL pourrait être mis à jour à partir 5.7.18
de , 5.7.19
mais pas 6.x
.
Où est stocké l'index du package? Sur une base de données? Sur un dossier?
Il est généralement stocké dans un ou plusieurs fichiers à l'intérieur /var/lib/apt
. Dans le contexte de Docker, ces fichiers sont à l'intérieur de l'image. Lors de la construction du Dockerfile, ils sont stockés dans les nouvelles couches du système de fichiers qui sont créées et conservées en tant que nouvelle image.
Que se passe-t-il si je fais l'installation d'apt-get sans mettre à jour le cache?
Vous pouvez essayer de télécharger des versions de packages qui n'existent plus. C'est assez courant sur les machines virtuelles, mais c'est également possible à l'intérieur des conteneurs si les référentiels de distribution ont publié de nouveaux packages après la construction de l'image de base. Il peut ne pas y avoir de coordination entre les responsables de la distribution et les responsables du Dockerfile, qui sont en aval de la distribution et peuvent être plus nombreux. Il n'y a qu'un seul référentiel Debian mais des milliers d' jessie
images de conteneurs et de Dockerfile.
De plus, certaines images en amont comme celle d'ubuntu suppriment l'index téléchargé pour réduire l'image et éviter les fichiers obsolètes. Il est donc attendu qu'un index mis à jour soit téléchargé lors de la construction au-dessus d'une image de base, et non pour chaque version d'une image de base à expédier avec le dernier index.
Y a-t-il une chance que le package distant n'existe plus et que le lien soit rompu?
Certainement, car les versions stockées dans l'index sont très précises comme 5.7.19
(simplification; elles sont plus similaires à 5.7.19-0ubuntu1
).
Y a-t-il une politique politique convenue sur les dépôts Deb? Par exemple, un référentiel doit-il contenir uniquement la dernière version d'un package, ou au contraire doit-il contenir toutes les versions disponibles pour une version de distribution spécifique?
Il est courant que les anciennes versions mineures soient supprimées rapidement une fois qu'une mise à jour est disponible; Je suppose que c'est pour économiser de l'espace sur les serveurs car les binaires peuvent peser plusieurs dizaines de mégaoctets, multipliés par toutes les versions et architectures prises en charge. Il est donc généralement impossible de préciser, par exemple, mysql-5.7.18
dans la suite apt-get install
; dès qu'il mysql-5.7.19
est publié dans la distribution, le précédent sera supprimé.
Pour être juste envers Docker, ce non-déterminisme apt-get update
est un problème qui est signalé dans le cadre de la gestion des packages de chaque distribution. Vous auriez le même problème en essayant de construire de manière répétitive une machine virtuelle EC2 ou Vagrant.
Certains administrateurs système utilisent des services tels qu'Aptly pour mettre en miroir les référentiels d'origine et pouvoir épingler une version particulière, mais vous courez le risque de manquer des mises à jour de sécurité, sauf si vous avez un processus distinct fréquemment exécuté pour tester les mises à jour et modifier ce que vous épinglent.