작성 배경 : 저희 팀에서 진행하는 스터디에 참여하는 멤버분들의 기술 포스팅 내용을 공유하고, 스터디 내용을 정리하기 위함
(’25) CI/CD + Argo CD + Vault 스터디 [모집마감]
[kkamji]님 : Container Image Build 방식 요약 - Blog
| 빌드 도구 | 필요 데몬 | 주요 특징 | 비고 |
|---|---|---|---|
| Docker | 필요 (Daemon 기반) | 전통적이고 직관적인 이미지 빌드 방식 | 가장 널리 사용됨 |
| Jib | 불필요 (Dockerless) | Java 기반, Gradle/Maven 통합 | JVM 애플리케이션에 최적 |
| Buildah | 불필요 (Daemonless) | 언어 비종속, Rootless 지원 | 보안 강화 및 CI 적합 |
| Buildpack | 불필요 (Daemonless) | 자동 빌드, Dockerfile 불필요 | Cloud Native Buildpack |
| Shipwright + Kaniko | 불필요 (Daemonless, Kubernetes) | Kubernetes 상에서 빌드 수행 | 완전한 클라우드 네이티브 |
[kimalarm]님 : 스터디 내용을 깔끔하게 정리 - Blog



도커가 필요 없는 Jib을 사용한 컨테이너 빌드 - JiB , Blog

# Jib로 Docker 없이 이미지 빌드·푸시
mvn compile com.google.cloud.tools:jib-maven-plugin:3.4.6:build \\
-Dimage=docker.io/shinminjin/jib-example:latest \\
-Djib.to.auth.username=$MYUSER \\
-Djib.to.auth.password=$MYTOKEN
# MAC 사용자는 아래 내용 추가
-Djib.from.platforms=linux/arm64


빌다 Buildah (+Podman) 를 사용한 컨테이너 빌드 - Home , Blog

buildah from --arch amd64 quay.io/centos/centos:latest
buildah copy centos-working-container index.html /var/www/html/index.html
...


빌드팩 Buildpacks 을 통한 컨테이너 빌드 - Home , Blog
https://buildpacks.io/docs/for-app-developers/concepts/buildpack/
# mac 경우 : <https://buildpacks.io/docs/for-app-developers/how-to/special-cases/build-for-arm/>
pack build nodejs-app --platform linux/arm64 --builder ***heroku/builder:24***
# windows wsl2 ubuntu 경우
pack build nodejs-app --builder ***paketobuildpacks/builder-jammy-base***

Dockerfile을 작성하지 않아도 소스 코드만으로 프로덕션 준비된 컨테이너 이미지를 생성
십라이트 Shipwright 와 카니코 kaniko or 빌다 Buildah 를 사용한 쿠버네티스 기반 컨테이너 빌드 - Home , Blog

(정보 참고) 카니코 kaniko 지원(구글) 종료 - Github , reddit , https://github.com/chainguard-dev/kaniko

# Build 리소스 생성
cat <<EOF | kubectl apply -f -
apiVersion: shipwright.io/v1alpha1
kind: Build
metadata:
name: kaniko-golang-build
annotations:
build.shipwright.io/build-run-deletion: "true" # 빌드 완료 후 BuildRun 삭제
spec:
source:
url: <https://github.com/shipwright-io/sample-go> # 소스 코드를 가져올 저장소
contextDir: docker-build # 소스 코드가 있는 디렉터리
strategy:
name: kaniko # 빌드에 사용할 ClusterBuildStrategy 이름
kind: ClusterBuildStrategy
dockerfile: Dockerfile
output:
image: docker.io/$REGISTRY_USER/sample-golang:latest # 결과 이미지를 저장할 장소
credentials:
name: push-secret # 레지스트리에 인증하고 이미지를 푸시하는 데 사용할 시크릿 이름
EOF
# 결과
build.shipwright.io/kaniko-golang-build created
