Яка мета "docker build --pull"?


17

Під час створення докерного зображення ви зазвичай використовуєте docker build ..

Але я виявив, що ви можете вказати --pull, щоб вся команда виглядала такdocker build --pull .

Я не впевнений у меті --pull. В офіційній документації Dockers написано: "Завжди намагайтеся витягнути нову версію зображення", і я не впевнений, що це означає в цьому контексті.

Ви використовуєте docker buildдля створення нового зображення, а згодом публікуєте його десь у реєстрі контейнерів. Чому ви хочете витягнути щось, що ще не існує?

Я б очікував, що щось таке "просте", як це можна легко знайти в Інтернеті, але, схоже, ніхто не має подібного питання, як це. Єдиний справжній хіт на Google стосується офіційних документів Dockers, які я (як зазначено вище) не розумію.

Спасибі за вашу допомогу!

Відповіді:


17

вона витягне останню версію будь-яких базових зображень, замість того, щоб повторно використовувати те, що ви вже помітили локально

візьмемо, наприклад, зображення на основі тегу, що рухається (наприклад, ubuntu:bionic). вище за течією періодично вносить зміни та відновлює, але у вас може бути місцевий місяць із зображенням локально. докер буде щасливо будувати проти старої бази. --pullбуде спричиняти як побічний ефект, так що ви будуєте на основі останнього базового зображення

~ зазвичай найкраща практика використовувати його, щоб якнайшвидше отримати виправлення безпеки за течією (замість того, щоб використовувати застарілі, потенційно вразливі зображення). хоча вам доведеться торгувати порушеннями (і якщо ви використовуєте незмінні теги, це не має значення)


Це дуже хороше пояснення із ubuntu:bionicзображенням, оскільки до нього (очевидно) немає доданої версії, але все одно буде різною щоразу, коли вони публікують нове зображення. Все має сенс. Дякую!
Джим Ахо

1
Якщо, ubuntu:0.1.0наприклад, було б базове зображення , і вони опублікували нове зображення, але з тією ж версією, тобто ubuntu:0.1.0- це означає docker build --pull, що знову завантажить все нове зображення? (що було б те, що більшість людей вважає за краще я здогадуюсь)
Джим Ахо

Я сподіваюся, що хтось уточнить останнє питання від @JimAho, тому що саме це я хочу зрозуміти і краще. Якщо образ щойно було висунуто, а більше нічого не змінилося, то чи не так воно не відбудовується?
learning2learn

2
@ learning2learn відповідь - так, тег докерного зображення - це лише рядок, тому "0.1.0" не відрізняється від прикладу у відповіді "bionic"
Ентоні Соттіл

@AnthonySottile Дякую дуже.
learning2learn

1

Проста відповідь. docker buildвикористовується для створення з локального dockerfile. docker pullвикористовується для витягування з док-хабу. Якщо ви використовуєте docker build без файлу docker, він видає помилку.

Коли ви вкажете, --pullабо :latestдокер спробує завантажити найновішу версію (за наявності)

В основному, якщо ви додасте --pull, він намагатиметься витягувати найновішу версію кожного разу, коли вона запускається.


Якщо у вас є шаруваті зображення - вони завжди будуть тягнути їх усіх ?
Джим Ахо

Якщо у вас є шаруваті зображення, деякі з них будуть кешовані на машині (старіші шари) і будь-які нові шари будуть витягнуті.
DuDoff

0

Docker дозволяє пропускання  --pull прапора  docker build, наприклад  docker build . --pull -t myimage. Це рекомендований спосіб забезпечити, щоб збірка завжди використовувала останнє зображення контейнера, незважаючи на версію, доступну на місцевому рівні. Однак варто згадати ще один додатковий момент:

Щоб переконатися, що ваша збірка повністю перебудована, включаючи перевірку базового зображення на оновлення, використовуйте наступні параметри при складанні:

--no-cache - Це змусить відновити вже наявні шари.

Тому повна команда буде виглядати приблизно так:

docker build . --pull --no-cache --tag myimage:version

Ті самі варіанти доступні для docker-compose:

docker-compose build --no-cache --pull


У звичайному використанні вам не потрібно --no-cache. Якщо базове зображення оновлюється (і --pullотримує нову версію), що автоматично недійсний кеш; аналогічно, якщо ви COPYінший код, який визнає недійсним кеш. Єдине, на що зазвичай це вплине - це якщо ви робите щось на зразок apt-get installпакету, розміщеного в мережі, і в цьому випадку --no-cacheвін змусить перевірити наявність нової версії, навіть якщо базове зображення не оновилося.
Девід Мазе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.