--no-cache Vs의 Alpine Dockerfile 장점 rm / var / cache / apk / *


87

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

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


3
나의 이해는 즉,이 --no-cache그렇게 존재 하지 않는 해야 rm /var/cache/apk/*나중에
하비에르 Buzzi

답변:


123

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


6
--no-cache더 우아 하다는 데 동의합니다 . 그러나 여러 apk add --no-cache명령을 사용하면 색인 파일이 매번 다운로드됩니다. 이 경우 apk update상단 rm -rf /var/cache/apk/*에서 하단 근처 에서 할 수 있는 네트워크 채팅이 적습니다 . 일부 패키지는 추가 --virtual되고 일부는 추가 되지 않을 때 정말 중요 합니다.
lilole

2

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

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


1
apk 매니페스트는 매우 효율적이므로 캐시를 공유하려는 노력은 그만한 가치가 없다고 주장합니다. 특히 최신 버전을 얻으려면 매번 캐시를 업데이트해야하기 때문입니다. 도커에서 전혀 캐시하지 않을 수도 있습니다
Daniel Farrell

docker를 사용하는 경우, 마지막이 아닌 모든 apk 추가에서 no-cache 옵션을 사용하는 것이 더 좋습니다.
Docker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.