ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker Build Time 개선기
    기술/Infra 2024. 1. 18. 23:07

    문제점

    같은 코드베이스에서 네 개의 거의 비슷한 도커파일을 통해 빌드하는데 일부 ( API, Admin ) 의 빌드 타임이 굉장히 늦어지는 문제를 발견 했습니다.

    분석

    너무나 당연하지만 문제는 이미지의 일부 코드가 달랐습니다.

     

    왜 Worker 만 캐시되었을까?

    actions@cache 를 사용해 캐시하고 있었는데 이 방식은 같은 이름의 가장 처음 생성한 캐시를 덮어쓰지 않습니다.

    즉, 우리 build cache 가 4 번 실행되는 데 그 중 가장 빠르게 실행된 것이 캐시되었던 것이였습니다.

    결론적으로 옛날에 Worker 와 API 의 Dockerfile 코드가 달라질 때 Worker 가 먼저 캐시를 선점했고

    이후에도 캐시 된 애가 더 빠르니 Worker 가 계속 캐시를 선점한 것이였습니다.

     

    해결

    당연히 API, Worker 를 별도 캐시하면 된다고 생각했습니다.

     

    actions@cache 와 build-and-push 의 cache-to 를 로컬로 설정하여 작업하고 있었지만

    더 좋은 방법이 있었습니다. docker build 때 `cache-to` 옵션을 `gha`( github action ) 으로 주면 알아서 github action cache 를 호출해 저장합니다.

    또한 `mode=max` 를 하여 레이어 별 캐시를 저장하여 일부가 바뀌더라도 캐시를 사용할 수 있도록 변경했습니다.

    이제 제일 중요한 worker, api 별도 캐시인데 `scope` 옵션을 통해 별도 캐시로 분리할 수 있었습니다.

     

    단점으로는 action 의 용량을 많이 쓰게 된다는 것에 있습니다. 

    캐시가 아무것도 없으면 9 분정도 걸리고 캐시가 있으면 2, 3 분정도 걸리게 해결했습니다.

     

    '기술 > Infra' 카테고리의 다른 글

    ECS 에 Key Pair 를 추가하거나 변경하기  (0) 2021.09.24
    EC2 의 용량 확장하기  (0) 2021.09.24

    댓글

Designed by Tistory.