캐시 워밍으로 Docker 빌드 시간 단축

3321 단어 devopsdockertutorial
빌드를 실행할 때마다 Docker는 로컬 캐시(있는 경우)를 사용하려고 시도합니다. 이미지를 로컬로 빌드한 적이 없지만 이미지가 이미 원격 도커 레지스트리에 있는 경우 어떻게 됩니까?

이 게시물에서는 원격 도커 레지스트리를 사용하여 도커 캐시를 준비하고 로컬 빌드 속도를 높이는 방법을 살펴보겠습니다. 이는 CI에서도 매우 유용할 수 있습니다.

도커에서 캐시를 따뜻하게 하는 방법



Docker 1.13부터 작은 트릭을 사용할 수 있습니다. --cache-from 플래그를 사용하여 docker가 다른 이미지의 레이어를 캐시로 사용하도록 지시할 수 있습니다. 유일한 전제 조건은 이미지가 로컬에 있어야 한다는 것입니다.

빌드하고 푸시하는 Dockerfile이 로컬에 있다고 가정해 보겠습니다.

$ docker build -t my-docker .
$ docker push my-docker


이제 다른 머신이나 CI에서 my-docker를 다시 빌드하려고 합니다. 여기에서 도커 레지스트리에 푸시한 이미지를 사용하여 빌드 속도를 높일 수 있습니다.

$ docker pull my-docker || true
$ docker build --cache-from my-docker .


이미지가 푸시되지 않은 경우 실패를 방지하기 위해 || true를 사용하고 이미지를 빌드의 캐시로 사용합니다.



Buildkit으로 캐시를 워밍하는 방법



기존 방식에서는 빌드를 실행하기 전에 이미지를 가져와야 합니다. Buildkit 및 BUILDKIT_INLINE_CACHE 를 사용하여 이를 피할 수 있습니다. how to set up Buildkit on your machine.의 이전 게시물에서 확인하실 수 있습니다.

캐시와 함께 실제로 필요한 것은 캐시 메타데이터가 포함된 JSON입니다. Buildkit을 사용하여 Docker 빌드를 실행하고 Docker 이미지에 캐시 정보를 추가할 수 있습니다.

$ export DOCKER_BUILDKIT=1
$ docker build -t my-docker --build-arg BUILDKIT_INLINE_CACHE=1 .
$ docker push my-docker


여기에서 export DOCKER_BUILDKIT=1로 Buildkit을 활성화한 다음 빌드 중에 --build-arg BUILDKIT_INLINE_CACHE=1를 사용합니다. 이 시점에서 빌드된 이미지는 다른 빌드의 캐시로 사용할 수 있습니다.

그런 다음 이전과 동일한 구문을 사용하여 다른 시스템이나 CI에서 빌드를 실행할 수 있습니다.

$ docker build --cache-from my-docker .


이번에는 빌더가 원격 이미지에서 사용할 수 있는 캐시가 있는지 확인하기 위해 레지스트리에서 JSON 메타데이터를 가져오는 것입니다. 캐시 적중이 있는 경우 필요한 레이어만 로컬에서 가져오고 빌더에서 사용합니다.

이거 야!



이 게시물에서는 다른 이미지를 사용하여 Docker 빌드 캐시를 워밍업하는 방법을 살펴보았습니다. 이 기술은 빌드 시간을 단축하는 데 도움이 됩니다.

빌드 시간을 단축할 수 있는 다른 방법을 찾고 있다면 multistage parallel Docker build 을 사용해 볼 수 있습니다.

Twitter에서 저에게 연락하고 여러분의 생각을 알려주세요!
이 문서는 원래 my blog에 게시되었습니다. 이 게시물이 마음에 들고 다른 사람들이 좋아하는 글을 읽고 싶다면 여기로 가세요!

좋은 웹페이지 즐겨찾기