Ventajas de Alpine Dockerfile de --no-cache frente a rm /var/cache/apk/*

Resuelto Angel S. Moreno asked hace 6 años • 2 respuestas

Al crear Dockerfiles usando una imagen de Alpine, a menudo he visto el uso de cualquiera de los dos

  • apk add --no-cache, o
  • apk addseguido de una rm /var/cache/apk/*declaración.

Tengo curiosidad por saber si el uso de la --no-cachebandera elimina la necesidad de borrar manualmente el caché del paquete usando rm /var/cache/apk/*. También me gustaría saber qué estilo se considera la mejor práctica.

Angel S. Moreno avatar Mar 06 '18 03:03 Angel S. Moreno
Aceptado

La --no-cacheopción permite no almacenar en caché el índice localmente, lo cual es útil para mantener los contenedores pequeños.

Literalmente es igual apk updateal principio y rm -rf /var/cache/apk/*al final.

Algún ejemplo donde usamos --no-cachela opción:

$ 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 ..

Otro ejemplo donde no usamos --no-cachela opción:

$ 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'

Como puedes ver ambos casos son válidos. En cuanto a mí, usar --no-cachela opción es más elegante.

nickgryg avatar Mar 05 '2018 20:03 nickgryg

Creo que este es un estilo de diseño. La esencia del caché es reutilizar, por ejemplo, varios contenedores pueden montar el mismo sistema de archivos en caché sin descargarlo repetidamente de la red.

Puede ver la wiki de Apline: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache

lupguo avatar Oct 28 '2019 06:10 lupguo