도커 캐싱으로 빌드시간 단축하기

깃헙 액션의 한계

CI/CD에서는 이미지 빌드 실행 시간을 최소화하는 것이 중요하다. 따라서 도커 파일을 작성할 때 각 레이어를 작은 단위로 분리하여 효율적으로 캐싱되도록 설계하는 것이 좋다.

하지만 깃헙 액션의 특성상 새로운 환경의 러너를 할당받게 되어 이전 빌드 내용이 남아있지 않아 캐시를 활용할 수 없었다.

도커의 캐시 옵션

도커는 이미지 빌드 시에 --cache-from 및 --cache-to를 사용하여 캐싱을 관리할 수 있다. 우리 프로젝트의 경우, 컨테이너 당 하나의 서비스만 띄우고 있기 때문에 도커 컴포즈를 사용한다. 도커 컴포즈에서 --cache-from--cache-to 는 각각 cache_fromcache_to 에 대응된다.

지금부터 해당 옵션을 활용하여 이미지 빌드시간을 단축해보자.

캐시 가져오기

cache_from 은 외부로 내보낸 빌드 캐시를 가져오는 데 사용된다. 이 옵션을 이용하면 이전에 내보낸 캐시를 가져와 현재 빌드에서 재사용할 수 있다.

캐시 내보내기

cache_to 옵션은 빌드 캐시를 외부로 내보내는 데 사용된다. 즉, 현재 빌드에서 생성된 캐시를 다른 곳에서 사용할 수 있다.

깃헙 액션에서 도커 캐싱하기

name: Backend Build
on:
  pull_request:
    types: [opened, edited]

현재 dev 브랜치로 PR이 열리고 수정될 때마다 백엔드 코드를 빌드하는 액션이 트리거된다. 해당 액션은 빌드가 제대로 이루어지는지 코드를 검사하는 용도로 사용된다.

이제 해당 액션의 빌드 캐시를 서비스를 배포할 때 재사용하어 CI/CD 시간을 단축시킬 것이다.