GitOps 실습의 핵심은 컨테이너 기반 애플리케이션이다.
Docker Desktop 를 사용하여 로컬 컨테이너환경을 구성 예정이다.
컨테이너를 빌드하는 방법은 다양함. 주로 많이 사용하는 것은 Docker
Docker 는 익숙하기에 다른 툴을 찾아봤음.
| 도구 | macOS 실행 가능 여부 | 설명 |
|---|---|---|
| Docker CLI | 지원 | Docker Desktop 환경에서 기본적으로 사용. CLI 기반 이미지 빌드 표준 |
| Jib | 지원 (Java Only) | JVM 기반, Gradle/Maven 플러그인 형태으로 Dockerfile 없이 빌드 가능함 |
| Buildah | 제한적으로 지원 (Linux 환경에서 많이 사용이 됨) | macOS에서는 직접적으로 실행이 불가함 |
| Buildpacks | 지원 | Cloud Native Buildpacks 표준. Docker Desktop과 연동됨. 언어 자동 감지 빌드 |
| Shipwright | 불가 | Kubernetes 클러스터내에서 동작됨 |
Docker, Jib, Buildpacks, Buildah 를 사용하여 빌드 예정
생략함
google 에서 제공하는 오픈소스 컨테이너 이미지 빌더로 Dockerfile 없이 컨테이너 이미지를 만들 수 있음. maven, gradle 에 plugin 형태로 제공되며 Dockerfile 없이 CLI 환경에서 간단하게 빌드 가능하여 생산성 향상이 기대됨.
Docker 이 필요없어서 보안 및 CI 환경에서 처리해야 하는 불필요한 구성이 없어도 됨. 다만 java 만 지원을 하기에 AAOS platform 빌드에서는 사용 불가.
자세한 내용은 아래 참고
gradle 에서 사용을 하려면, 아래 처럼 plugin 추가 및 사용을 하는 이미지를 지정을 해줘야 함.
아래 명령어를 사용해서 jib.from.image, jib.to.image 를 변경할 수 있음.
e.g
git clone git@github.com:youngseokyoon/gradle-example.git
time ./gradlew clean jibDockerBuild \
-Djib.from.image=eclipse-temurin:25-jdk \
-Djib.to.image=gradle-example:dev
time ./gradlew clean jibDockerBuild \
-Djib.from.image=gradle-example:dev \
-Djib.to.image=gradle-example:dev-layered
https://buildpacks.io/
https://buildpacks.io/docs/for-platform-operators/how-to/integrate-ci/pack/
brew install buildpacks/tap/pack
pack 에는 다양한 명령어가 있음.
Available Commands:
build Generate app image from source code
builder Interact with builders
buildpack Interact with buildpacks
extension Interact with extensions
config Interact with your local pack config file
inspect Show information about a built app image
stack (deprecated) Interact with stacks
rebase Rebase app image with latest run image
sbom Interact with SBoM
completion Outputs completion script location
report Display useful information for reporting an issue
version Show current 'pack' version
help Help about any command
pack build --help
Usage:
pack build <image-name> [flags]
Examples:
pack build test_img --path apps/test-app --builder cnbs/sample-builder:bionic
소스 구조에 따라 사용할 수 있는 builder 를 추전 받을 수 있음.
pack builder suggest -v
Suggested builders:
Google: gcr.io/buildpacks/builder:google-22 Ubuntu 22.04 base image with buildpacks for .NET, Dart, Go, Java, Node.js, PHP, Python, and Ruby
Heroku: heroku/builder:24 Ubuntu 24.04 AMD64+ARM64 base image with buildpacks for .NET, Go, Java, Node.js, PHP, Python, Ruby & Scala.
Paketo Buildpacks: paketobuildpacks/builder-jammy-base Ubuntu 22.04 Jammy Jellyfish base image with buildpacks for Java, Go, .NET Core, Node.js, Python, Apache HTTPD, NGINX and Procfile
Paketo Buildpacks: paketobuildpacks/builder-jammy-buildpackless-static Static base image (Ubuntu Jammy Jellyfish build image, distroless-like run image) with no buildpacks included. To use, specify buildpacks at build time.
Paketo Buildpacks: paketobuildpacks/builder-jammy-full Ubuntu 22.04 Jammy Jellyfish full image with buildpacks for Apache HTTPD, Go, Java, Java Native Image, .NET, NGINX, Node.js, PHP, Procfile, Python, and Ruby
Paketo Buildpacks: paketobuildpacks/builder-jammy-tiny Tiny base image (Ubuntu Jammy Jellyfish build image, distroless-like run image) with buildpacks for Java, Java Native Image and Go
Paketo Buildpacks: paketobuildpacks/builder-ubi8-base Ubi 8 base builder with buildpacks for Node.js, Java, Quarkus and Procfile
Tip: Learn more about a specific builder with:
pack builder inspect <builder-image>
builder: paketobuildpacks/builder-jammy-base
pack build gradle-example:latest \
--builder paketobuildpacks/builder-jammy-base \
--run-image paketobuildpacks/run-jammy-base:0.1.175 \
--buildpack paketo-buildpacks/gradle@7.6.0 \
--path . \
--env BP_JVM_VERSION=25 \
--env BP_GRADLE_BUILD_ARGUMENTS="build"
paketo-buildpacks/gradle@7.6.0 로 지정을 한 이유, gradle@8 이상 부터는 syft 가 필수임. 해당 부분 회피를 위해 7.6.0 으로 명시함.
macOS 에서는 사용이 불가함.
Linux Container 에서 사용가능함
참고링크: