예전에 다녔던 회사에서는 도커라이징 할 때 Dockerfile을 작성하고, 소스 코드를 빌드한 다음 kaniko를 통해 이미지를 빌드하고 푸시했습니다.
현재 재직 중인 회사에서는 buildpack으로 CI/CD 작업을 간소화해서 운영하고 있었습니다.
그래서 이번 기회로 buildpack이 무엇인지 간단히 정리해 보려고 합니다.
Spring Boot 문서에 아래와 같이 자세하게 정리가 되어있는데요.
Dockerfile 없이도 buildpack을 통해서 이미지를 만들 수 있다고 하는데요.
Maven 플러그인을 사용하시면 pom.xml, Gradle을 사용하시면 build.gradle 파일에 bootBuildImage에 대한 작업을 정의해서 CI/CD 파이프라인에 활용하시면 됩니다.
예시를 참고해 bootBuildImage에 대한 작업을 명시하고 아래의 명령을 통해 이미지 빌드를 수행할 수 있습니다.
./gradelw bootBuildImage
추가로, 공식 문서에도 기재되어 있지만 JVM 옵션을 바꾸고 싶으면 아래와 같이 적용 할 수도 있습니다!
tasks.named<BootBuildImage>("bootBuildImage") {
environment.set(mapOf(
"BPE_DELIM_JAVA_TOOL_OPTIONS" to " ",
"BPE_APPEND_JAVA_TOOL_OPTIONS" to "-XX:+HeapDumpOnOutOfMemoryError"
))
}
실무에서 활용해보니 CI/CD 파이프라인 자체가 간소화되고 가독성이 좋기는 한데, Dockerfile에서 스테이지를 나누고 레이어 수를 줄이는 경량화와 관련된 작업은 할 수 없는 것 같아요.
혹시 buildpack을 사용하면서도 이미지 경량화를 할 수 있는 방법을 알고 계신 분이 있을까요~?