Як оновити Docker apt-get update?


1

Тож я знаю, що з кожною RUNкомандою докер створює шар або залякує зображення, якщо захочете, і що це призводить до кешування apt-get update. Але у мене дуже важкі часи з встановленням нових пакетів з apt-getдокером, і я не впевнений, що відбувається, я витратив години на час, розбираючись, куди нікуди, я в основному використовую ubuntu як базове зображення.

Деякі пакети, здається, випадково не встановлюються, наприклад wget. Якщо я заходжу в термінал у своєму контейнері і роблю apt-get updateто, apt-get install wgetя можу встановити wget. Але у файлі докера, навіть коли я видаляю всі зображення, створені кожним рядком RUN, щоб зупинити кешування оновлення, я не можу встановити wget з точно такими самими командами, це абсолютне божевілля, і я відчуваю, що я божевільний .

Інші пакети, здається, випадково працюють, а не працюють. У мене навіть був цей пакет: python-glpkякий спочатку встановлювався в Dockerfile, але вже не ... Я не в змозі побачити детерміновану поведінку для оновлення та встановлення, вони, здається, працюють, коли вітер дме лише в певному напрямку.

Потрібно багато часу робити оновлення в Інтернеті, і я перебуваю на віртуальній машині, щоб мій робочий процес був повністю порушений, втрачено стільки часу, чи ще хтось має проблеми з простим apt-get update && apt-get install? Які найкращі практики стосуються apt-getдокера, щоб переконатися, що все працює як слід?

Відповіді:


0

Деякі вихідні дані або журнали було б добре відповісти на ваше запитання.

Іноді оновлення apt-get стає повільним, воно не має нічого спільного з самим докером. Якщо у вас погані пакети з'єднань, завантаження не вдалося повністю.

Як ви вже говорили, кожен рядок у Dockerfile створить шар зображення, а кеш буде збережено локально, щоб прискорити створення зображень. Існує деяка практика мінімізувати розмір зображення докера та розміщувати якомога менше рядків, комбінуючи їх, тому у випадку встановлення пакета використовується наступний шаблон:

RUN \
  apt-get update &&\
  apt-get install -y zip &&\
  rm -rf /var/lib/apt/lists/*

Це потребує певного часу, щоб оновити кеш, встановити пакет та простір очищення, і він генеруватиме лише один шар зображення, тому будь-яка інша установка пакета, для встановлення пакунків, спочатку вам потрібно буде apt-отримати оновлення .

Один із підходів, який ви можете спробувати, - це виконувати кожен крок у новому операторі RUN:

RUN \
  apt-get update

RUN \
  apt-get install -y zip

RUN \
  apt-get install -y curl

Таким чином у вас буде більше шарів, але у вас буде "оновлений" apt шар кешу, і ви будете встановлювати пакети один за одним.


0

Просто цікава примітка на цю тему. Кілька людей схильні налаштовувати FROM ubuntuта додавати допоміжні сценарії для обрізки установки пакета. Але офіційний ubuntu: зображення 18.04 має декілька вдосконалень. Виконати це:

docker run --rm -it ubuntu:18.04 bash

І огляньте навколо, /etc/aptщоб помітити, що в ньому є кілька тригерів, спеціально для докерних збірок.

root@12711b0547f3:/# ll /etc/apt/apt.conf.d/
total 40
drwxr-xr-x 1 root root 4096 Feb  6 03:37 ./
drwxr-xr-x 1 root root 4096 Feb  4 21:03 ../
-rw-r--r-- 1 root root   42 Apr 20  2018 01-vendor-ubuntu
-rw-r--r-- 1 root root  927 Jan 25 11:51 01autoremove
-r--r--r-- 1 root root 1081 Feb  4 21:03 01autoremove-kernels
-rw-r--r-- 1 root root  182 Feb 28  2018 70debconf
-rw-r--r-- 1 root root   44 Feb  6 03:37 docker-autoremove-suggests
-rw-r--r-- 1 root root  318 Feb  6 03:37 docker-clean
-rw-r--r-- 1 root root   70 Feb  6 03:37 docker-gzip-indexes
-rw-r--r-- 1 root root   27 Feb  6 03:37 docker-no-languages

aptзаздалегідь налаштовано для очищення кеш-пам'яті після кожного apt install, використання стислих indeces та уникнення пропозицій щодо подальших пакетів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.