Alpine Dockerfile Advantages of --no-cache Vs. rm /var/cache/apk/*
The --no-cache
option allows to not cache the index locally, which is useful for keeping containers small.
Literally it equals apk update
in the beginning and rm -rf /var/cache/apk/*
in the end.
Some example where we use --no-cache
option:
$ docker run -ti alpine:3.7/ # apk add nginxWARNING: Ignoring APKINDEX.70c88391.tar.gz: No such file or directoryWARNING: Ignoring APKINDEX.5022a8a2.tar.gz: No such file or directoryERROR: unsatisfiable constraints: nginx (missing): required by: world[nginx]/ # / # apk add --no-cache nginxfetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gzfetch 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-installExecuting busybox-1.27.2-r7.triggerOK: 6 MiB in 13 packages/ # / # ls -la /var/cache/apk/total 8drwxr-xr-x 2 root root 4096 Jan 9 19:37 .drwxr-xr-x 5 root root 4096 Mar 5 20:29 ..
Another example where we don't use --no-cache
option:
$ docker run -ti alpine:3.7/ # apk add nginxWARNING: Ignoring APKINDEX.70c88391.tar.gz: No such file or directoryWARNING: Ignoring APKINDEX.5022a8a2.tar.gz: No such file or directoryERROR: unsatisfiable constraints: nginx (missing): required by: world[nginx]/ # / # apk updatefetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gzv3.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-installExecuting busybox-1.27.2-r7.triggerOK: 6 MiB in 13 packages/ # / # ls -la /var/cache/apk/total 1204drwxr-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'
As you can see both cases are valid. As for me, using --no-cache
option is more elegant.
I think this is a design style. The essence of cache is to reuse, for example, multiple containers can mount the same cached file system without repeatedly downloading it from the network.
Can view the apline wiki: https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache