[docker] –no-cache Vs의 Alpine Dockerfile 장점 rm / var / cache / apk / *

Alpine 이미지를 사용하여 Dockerfile을 만들 때 나는 종종를 사용하는 apk --no-cache것을 보았습니다 rm /var/cache/apk/*.

를 사용 --no-cache하면 나중에 rm /var/cache/apk/*. 또한 한 스타일이 다른 스타일보다 선호되는지 알고 싶습니다.



답변

--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옵션을 사용하는 것이 더 우아합니다.


답변

디자인 스타일이라고 생각합니다. 캐시의 본질은 재사용하는 것입니다. 예를 들어 여러 컨테이너가 네트워크에서 반복적으로 다운로드하지 않고도 동일한 캐시 파일 시스템을 마운트 할 수 있습니다.

apline wiki를 볼 수 있습니다 : https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management#Local_Cache


답변