Alpine Dockerfile Advantages of --no-cache Vs. rm /var/cache/apk/*

前端 未结 2 561
长情又很酷
长情又很酷 2021-01-30 06:31

When creating Dockerfiles using the Alpine image, I have often seen the use of the apk --no-cache and other times it is committed and instead I see rm /var/ca

相关标签:
2条回答
  • 2021-01-30 06:33

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

    Another example where we don't use --no-cache option:

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

    As you can see both cases are valid. As for me, using --no-cache option is more elegant.

    0 讨论(0)
  • 2021-01-30 06:35

    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

    0 讨论(0)
提交回复
热议问题