9 oktober 2023
|Containers hebben zich bewezen als een robuuste technologie om applicaties consistent te builden en deployen. Het automatisch builden van deze containers is een essentieel onderdeel van de software delivery livecycle. Voor het builden van containers maken we gebruik van een daemon, maar dit is niet zonder risico's. Daarom duiken we in dit artikel in de wereld van Kaniko - een tool ontworpen om container images te bouwen zonder een daemon. En onderzoeken we hoe het kan worden geïntegreerd in een CI/CD pipeline.
Kaniko is een open-source project van Google dat het builden van container images mogelijk maakt zonder dat er een daemon nodig is. Dit maakt het bijzonder nuttig in omgevingen waar de daemon niet kan of mag draaien, zoals in sommige CI/CD pipelines. Kaniko kan worden uitgevoerd in een Kubernetes-cluster of een ander platform dat containers orchestreert en kan images pushen naar elke gewenste container image registry.
Er zijn verschillende redenen waarom je Kaniko zou willen gebruiken in je CI/CD pipeline:
In het volgende voorbeeld gebruiken we Gitlab om met Kaniko een image te builden:
build and push:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s"\
"${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}"\
| base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
Wat gebeurt hier:
before_script
en script
niet kunnen draaien.before_script
om Kaniko te configureren, zodat deze de juiste credentials heeft om in te loggen op de registry.Deze job maakt zoveel mogelijk gebruik van Gitlab's pre-defined variabelen. CI_REGISTRY
, CI_REGISTRY_USER
en CI_REGISTRY_PASSWORD
zal je zelf moeten instellen als variabel.
Kaniko biedt een efficiënte en veilige manier om container images te bouwen binnen CI/CD pipelines zonder afhankelijk te zijn van een daemon. Het minimaliseert de complexiteit en de veiligheidsrisico's die kunnen ontstaan bij het werken met Docker, terwijl het tegelijkertijd naadloos integreert met bestaande Dockerfiles en registries. Zo maakt Kaniko het gemakkelijker voor ontwikkelaars en DevOps-teams om applicaties snel, consistent en veilig te bouwen en te leveren.