Переваги Alpine Dockerfile --no-cache Vs. rm / var / cache / apk / *


87

Створюючи Dockerfiles з використанням альпійського зображення, я часто бачив використання apk --no-cache та інших випадків, коли воно здійснюється, і натомість бачу rm /var/cache/apk/*.

Мені цікаво знати, як використання цього методу --no-cacheпозбавляє потреби пізніше робити a rm /var/cache/apk/*. Я також хотів би знати, чи один стиль надається перевагу іншому.


3
Я розумію, що --no-cacheце є, тому вам не доведеться робити це rm /var/cache/apk/*пізніше
Хав'єр Буцці

Відповіді:


122

--no-cacheОпція дозволяє не кешувати індекс локально, що корисно для зберігання контейнерів мало.

Буквально це дорівнює apk updateна початку і rm -rf /var/cache/apk/*в кінці.

Ось приклад, де ми використовуємо --no-cacheопцію:

$ docker run -ti alpine:3.7
/ # apk add nginx
WARNING: Ignoring APKINDEX.70c88391.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.5022a8a2.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
  nginx (missing):
    required by: world[nginx]
/ # 
/ # apk add --no-cache nginx
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/2) Installing pcre (8.41-r1)
(2/2) Installing nginx (1.12.2-r3)
Executing nginx-1.12.2-r3.pre-install
Executing busybox-1.27.2-r7.trigger
OK: 6 MiB in 13 packages
/ # 
/ # ls -la /var/cache/apk/
total 8
drwxr-xr-x    2 root     root          4096 Jan  9 19:37 .
drwxr-xr-x    5 root     root          4096 Mar  5 20:29 ..

Ще один приклад, коли ми не використовуємо --no-cacheопцію:

$ docker run -ti alpine:3.7
/ # apk add nginx
WARNING: Ignoring APKINDEX.70c88391.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.5022a8a2.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
  nginx (missing):
    required by: world[nginx]
/ # 
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
v3.7.0-107-g15dd6b8ab3 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.0-105-g4b8b158c40 [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 9048 distinct packages available
/ # 
/ # apk add nginx
(1/2) Installing pcre (8.41-r1)
(2/2) Installing nginx (1.12.2-r3)
Executing nginx-1.12.2-r3.pre-install
Executing busybox-1.27.2-r7.trigger
OK: 6 MiB in 13 packages
/ # 
/ # ls -la /var/cache/apk/
total 1204
drwxr-xr-x    2 root     root          4096 Mar  5 20:31 .
drwxr-xr-x    6 root     root          4096 Mar  5 20:31 ..
-rw-r--r--    1 root     root        451508 Mar  3 00:30 APKINDEX.5022a8a2.tar.gz
-rw-r--r--    1 root     root        768680 Mar  5 09:39 APKINDEX.70c88391.tar.gz
/ # 
/ # rm -vrf /var/cache/apk/*
removed '/var/cache/apk/APKINDEX.5022a8a2.tar.gz'
removed '/var/cache/apk/APKINDEX.70c88391.tar.gz'

Як бачите, обидва випадки дійсні. Як на мене, використання --no-cacheопції є більш елегантним.


5
Я згоден, що --no-cacheце більш елегантно. Але за допомогою декількох apk add --no-cacheкоманд файли індексу завантажуються щоразу. У цьому випадку це менше, ніж мережеві балачки apk updateвгорі, а потім rm -rf /var/cache/apk/*внизу. Це дійсно має значення, коли деякі пакети додаються, --virtualа деякі ні.
lilole

2

Я думаю, що це стиль дизайну. Суть кеш-пам'яті полягає у повторному використанні, наприклад, кілька контейнерів можуть монтувати одну і ту ж кешовану файлову систему, не повторно завантажуючи її з мережі.

Можна переглянути apline wiki: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache


1
маніфести apk настільки ефективні, я б стверджував, що намагання ділитися кешем не варте того, особливо тому, що все одно доведеться оновлювати кеш, щоб отримати найновіші версії. Травня також просто не кешувати в Docker
Даніель Фаррелл

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