Docker "RUN-mount = type = cache, target"에 대한 이야기
17942 단어 Docker
개요
docker build 캐시를 사용할 때의 글
글에는 RUN-mount = type = secret, RUN-mount = type = ssh가 언급되지 않았습니다.
환경 확인
docker for mac을 사용하고 있습니다.
$ uname -a
Darwin mbp01 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64
$ docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:44:48 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: 9013bf5
Built: Thu Oct 17 23:50:38 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
확인
(매크로 패키지 관리자 캐시 설정)
예를 들어 이런 Docker file이 있습니다.
(dnf를 사용하여 포장을 적당히 설치하면 된다)
FROM centos:8
RUN echo "test1"
RUN dnf install -y \
gcc gcr lvm2 clang
buildkit을 사용한 상태에서 이것을 구축해 보십시오그래서 손 옆에 있는 환경에서 약 50초 만에 구축을 마쳤다.
docker image build -t test01 .
[+] Building 49.4s (7/7) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 114B 0.0s
=> [internal] load metadata for docker.io/library/centos:8 2.1s
=> [1/3] FROM docker.io/library/centos:8@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 0.0s
=> CACHED [2/3] RUN echo "test1" 0.0s
=> [3/3] RUN dnf install -y gcc gcr lvm2 clang 44.1s
=> exporting to image 3.2s
=> => exporting layers 3.2s
=> => writing image sha256:d122ae7f88c40310b925ca575df754f3732a18fb26a488ba11c8de7bf174d1e4 0.0s
=> => naming to docker.io/library/test01 0.0s
>>> elapsed time 50s
그리고 app 이전에 층을 새로 만들기 위해 아래와 같이 dockerfile을 수정합니다.FROM centos:8
RUN echo "test2" # 修正
RUN dnf install -y \
gcc gcr lvm2 clang
그리고 같은 지령으로 구축하려면 시간이 많이 걸리지 않는다.(이미지 레이어에 대해서는 다음을 참조하십시오.)
모르면 손해라는 Docker 인상층 구조
$ docker image build -t test02 .
[+] Building 52.6s (7/7) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 114B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:8 3.0s
=> CACHED [1/3] FROM docker.io/library/centos:8@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 0.0s
=> [2/3] RUN echo "test2" 0.7s
=> [3/3] RUN dnf install -y gcc gcr lvm2 clang 45.7s
=> exporting to image 3.0s
=> => exporting layers 3.0s
=> => writing image sha256:85b29e834097a17f7311c775bed1b1a0604ddacc6af81a19267edff0ab4ae7cf 0.0s
=> => naming to docker.io/library/test02 0.0s
>>> elapsed time 52s
가장 시간이 걸리는 것은 당신이 알고 있는 gcc의 설치입니다.gcc의 설치는 의존하는 소프트웨어 패키지가 많기 때문에 시간이 오래 걸린다.
nf(yum)는 매우 똑똑하다.자신의 캐시를 가지고 그곳을 효과적으로 이용하면 신속하게 구축할 수 있다는 느낌이 든다.
이때 유용한 것은 바로'--mount=type=cache, target'이다.
옵션
Option
Description
id
고유 ID 지정
target(필수)
마운트 경로 지정
ro,readonly
읽기 전용 옵션
sharing
공유할 때의 방식(자세한 내용은 아래 페이지를 참조하세요.🙇♂️)
from
캐시 기반이 되는 디렉토리
패키지 관리자의 캐시를 이용하여 구축할 수 있습니다.
예를 들어 Docker file입니다.
아직 비표준 명령이므로 첫 번째 행에는 "#syntax = docker/dockerfile:experimental"에 대한 설명이 필요합니다.
"--mount=type = cache, target"대상의 디렉터리를 부드럽게 저장하려면 (app 등이라면 적당히 다시 읽으십시오)
# syntax = docker/dockerfile:experimental
FROM centos:8
RUN echo "test3"
RUN \
--mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
dnf install -y \
gcc gcr lvm2 clang
첫 번째 구축
첫 번째는 현금 구축이다.위와 마찬가지로 50초 정도 걸립니다.
$ docker image build -t test03 .
[+] Building 52.3s (9/9) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 250B 0.0s
=> resolve image config for docker.io/docker/dockerfile:experimental 2.1s
=> CACHED docker-image://docker.io/docker/dockerfile:experimental@sha256:888f21826273409b5ef5ff9ceb90c64a8f8ec7760da30d1ffbe6c3 0.0s
=> [internal] load metadata for docker.io/library/centos:8 0.9s
=> CACHED [stage-0 1/3] FROM docker.io/library/centos:8@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 0.0s
=> [stage-0 2/3] RUN echo "test3" 0.7s
=> [stage-0 3/3] RUN --mount=type=cache,target=/var/cache/dnf --mount=type=cache,target=/var/lib/dnf dnf install -y gcc 44.8s
=> exporting to image 3.1s
=> => exporting layers 3.1s
=> => writing image sha256:a4f1634b51036b0ae3107ac44884e980701a698c44315786c9eb42450f65ce51 0.0s
=> => naming to docker.io/library/test03
2차 구축
캐시를 사용하지 않는 검증과 같이 echo의 부분을 다시 씁니다.
# syntax = docker/dockerfile:experimental
FROM centos:8
RUN echo "test4" #修正
RUN \
--mount=type=cache,target=/var/cache/dnf \
--mount=type=cache,target=/var/lib/dnf \
dnf install -y \
gcc gcr lvm2 clang
위의 구문을 사용합니다.결과는 약 20초 단축됐다.
docker image build -t test04 .
[+] Building 35.7s (9/9) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 250B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> resolve image config for docker.io/docker/dockerfile:experimental 0.9s
=> CACHED docker-image://docker.io/docker/dockerfile:experimental@sha256:888f21826273409b5ef5ff9ceb90c64a8f8ec7760da30d1ffbe6c3 0.0s
=> [internal] load metadata for docker.io/library/centos:8 0.9s
=> CACHED [stage-0 1/3] FROM docker.io/library/centos:8@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9 0.0s
=> [stage-0 2/3] RUN echo "test4" 0.7s
=> [stage-0 3/3] RUN --mount=type=cache,target=/var/cache/dnf --mount=type=cache,target=/var/lib/dnf dnf install -y gcc 29.5s
=> exporting to image 2.9s
=> => exporting layers 2.9s
=> => writing image sha256:602d0e7bcc5b5701276bc0d25c853557d45b6925cb049cd4848b739647992ba0 0.0s
=> => naming to docker.io/library/test04 0.0s
>>> elapsed time 35s
"[stage-03/3] RUN-mount = type = cache, target=/var/cache/dnf"섹션에 주목해야 합니다.처음엔 44초가량 걸렸고 상대로는 30초가량 걸렸다.
총결산
이번에 dnf에서 해봤는데 pip와 포장 관리가 텍스트로 된 포장 관리자 등도 효과가 있어요.
(requirements.txt를 빈번하게 다시 쓰는 경우도 어느 정도 캐시 효과가 있나요?)
가방의 갱신과 현금이 효과적인 부분(다무대빌딩의 보도가 많다)의 개선이 기쁘다.
나는 앞으로 시도하면서 놀고 싶다.
사이트 축소판 그림
Reference
이 문제에 관하여(Docker "RUN-mount = type = cache, target"에 대한 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryuichi1208/items/d13ec434e694d672ab36텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)