Чи могли б хтось пояснити, що робить оновлення команди apt-get і коли я дійсно повинен її використовувати?
apt-get update
завантажує оновлені індекси з сховищ пакетів дистрибутива, перелічуючи всі доступні пакети та їх точні версії.
Поширені дистрибутиви, такі як Ubuntu та Debian, як правило, консервативні та зворотно сумісні у своїх пропозиціях пакетів, тому версії з часом не сильно змінюватимуться; вони зміняться через оновлення безпеки або виправлення помилок. Наприклад, MySQL може бути підвищений з 5.7.18
до , 5.7.19
але не 6.x
.
Де зберігається індекс упаковки? На базі даних? На файл?
Зазвичай він зберігається в одному або декількох файлах всередині /var/lib/apt
. У контексті Докера ці файли знаходяться всередині зображення. Під час створення Dockerfile вони зберігаються в нових шарах файлової системи, які створюються та зберігаються як щойно побудовані зображення.
Що станеться, якщо я встановити apt-get install без оновлення кешу?
Ви можете спробувати завантажити версії пакетів, які вже не існують. Це досить часто на віртуальних машинах, але це можливо і в контейнерах, якщо сховища дистрибуції випустили нові пакети після побудови базового зображення. Можливо, немає координації між диспетчерами дистрибуції та обслуговуючими файлами Dockerfile, які знаходяться нижче від розповсюдження і можуть бути більшими за кількістю. Є лише одне сховище Debian, але тисячі jessie
зображень контейнерів на основі та Dockerfile.
Більше того, деякі образи вгору за течією, такі як ubuntu, видаляють завантажений індекс, щоб зменшити зображення та уникнути застарілих файлів там. Тож очікується, що оновлений індекс слід завантажувати під час побудови на базі базового зображення, а не для кожної версії базового зображення, що постачається з останнім індексом.
Чи є ймовірність, що віддалений пакет більше не існуватиме і посилання буде розірвано?
Безперечно, тому що версії, що зберігаються в індексі, дуже точні 5.7.19
(спрощення; вони більш схожі на 5.7.19-0ubuntu1
).
Чи є якась узгоджена політика щодо депозитаріїв дебютів? Наприклад, чи повинен репозиторій містить лише останню версію пакета, або навпаки, чи повинен він містити всі версії, доступні для конкретного випуску дистрибутива?
Старі незначні версії зазвичай швидко видаляються, коли доступне оновлення; Я припускаю, що це економить місце на серверах, оскільки двійкові файли можуть важити кілька десятків мегабайт, помножених на всі підтримувані версії та архітектури. Тому зазвичай неможливо закріпити, скажімо, mysql-5.7.18
наступні apt-get install
; як тільки mysql-5.7.19
вийде в дистрибутив, попередній буде видалений.
Якщо бути справедливим до Докера, цей недетермінізм apt-get update
є проблемою, яка розглядається як частина управління пакетами кожного дистрибутива. У вас виникнуть ті самі проблеми, намагаючись повторно створити віртуальну машину EC2 або Vagrant.
Деякі системні адміністратори використовують такі сервіси, як Aptly для дзеркального відображення оригінальних сховищ та зможуть закріпити певну версію, але ви ризикуєте пропустити оновлення безпеки, якщо у вас не є часто запущений окремий процес для тестування оновлень та зміни того, що ви пришпилюють.