在使用Alpine映像创建Dockerfiles时,我经常看到使用
apk add --no-cache
apk add
rm /var/cache/apk/*
我很想知道使用--no-cache标志是否可以消除使用rm /var/cache/apk/*手动清除包缓存的需要。我还想知道哪种样式被认为是最佳实践。
--no-cache
5lhxktic1#
--no-cache选项允许不在本地缓存索引,这对于保持容器较小很有用。从字面上看,它在开始时等于apk update,在结束时等于rm -rf /var/cache/apk/*。使用--no-cache选项的一些示例:
apk update
rm -rf /var/cache/apk/*
$ 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选项更优雅。
qvtsj1bj2#
我认为这是一种设计风格,缓存的本质是重用,比如多个容器可以挂载同一个缓存的文件系统,而不需要从网络上反复下载。可以查看apline wiki:https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache
2条答案
按热度按时间5lhxktic1#
--no-cache
选项允许不在本地缓存索引,这对于保持容器较小很有用。从字面上看,它在开始时等于
apk update
,在结束时等于rm -rf /var/cache/apk/*
。使用
--no-cache
选项的一些示例:另一个不使用
--no-cache
选项的示例:正如你所看到的,这两种情况都是有效的。对我来说,使用
--no-cache
选项更优雅。qvtsj1bj2#
我认为这是一种设计风格,缓存的本质是重用,比如多个容器可以挂载同一个缓存的文件系统,而不需要从网络上反复下载。
可以查看apline wiki:https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache