Image builder

Budowanie własnych kontenerów w procesie CI/CD może wydawać się skomplikowane, ale wcale nie musi takie być. W tym wpisie pokażę krok po kroku, jak przygotować pipeline do budowania i publikowania obrazów kontenerowych z użyciem narzędzia Buildah.
Dziś przedstawie wam, jak zbudowałem własny image builder, krok po kroku.
Buildah pozwala tworzyć obrazy kontenerów bez uruchamiania demona i bez konieczności posiadania Dockera.
Kluczowe cechy
Section titled “Kluczowe cechy”- Brak demona
Buildah działa jako zwykłe polecenie CLI – nie wymaga działającego serwisu w tle (jak
dockerd). - Rootless (bez uprawnień roota) Może budować obrazy jako zwykły użytkownik, co znacząco poprawia bezpieczeństwo.
- Zgodność z OCI / Docker Tworzone obrazy są w pełni kompatybilne z Dockerem, Podmanem, Kubernetesem itd.
- Skryptowalność
Buildah jest zaprojektowany jako zestaw niskopoziomowych poleceń (
buildah from,buildah run,buildah commit), idealnych do automatyzacji w bashu lub CI. - Dockerfile – opcjonalnie
Obsługuje Dockerfile (
buildah bud), ale nie wymusza ich użycia.
Krok po kroku
Section titled “Krok po kroku”-
Utworzenie repozytoriów
Section titled “Utworzenie repozytoriów”Definicja repozytorium pl.rachuna-net/artifacts/containers/buildah
-
Utworzenie kontenera mechanizmem .devcontainer i opublikowanie w gitlab
Section titled “Utworzenie kontenera mechanizmem .devcontainer i opublikowanie w gitlab”Dokładny opis znajdziesz w tym artykule
dokerfile:
FROM ubuntu:noble ENV DEBIAN_FRONTEND=noninteractive ENV STORAGE_DRIVER=vfs ENV BUILDAH_ISOLATION=chroot COPY scripts/ /opt/scripts/ # Install system dependencies and ansible RUN apt-get update && apt-get install -y \ buildah \ curl \ fuse-overlayfs \ gzip \ slirp4netns \ iproute2 \ uidmap \ iputils-ping \ dnsutils \ ca-certificates \ git \ curl \ gnupg \ sudo \ software-properties-common \ tar \ yq \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && mkdir -p /tmp/buildah-root \ && mkdir -p /tmp/buildah-runroot \ # Make scripts executable && chmod +x /opt/scripts/*.bash ENTRYPOINT ["/opt/scripts/entrypoint.bash"] -
Przygotowanie procesu CI
Section titled “Przygotowanie procesu CI”Dokładny kod znajdziesz tutaj
-
Napisanie konfiguracji dla obrazu buildah
Section titled “Napisanie konfiguracji dla obrazu buildah”Wydanie wersji buildah v1.0.0
--- base_image: ubuntu:noble labels: maintainer: "Maciej Rachuna <rachuna.maciej@gmail.com>" description: Kontener z narzędziem Buildah, wykorzystywany w procesach budowania kontenerów w środowisku GitLab CI. version: "1.0.0" image_source: "https://gitlab.com/pl.rachuna-net/containers/buildah" env: DEBIAN_FRONTEND: noninteractive TF_IN_AUTOMATION: "true" LANG: C.UTF-8 before_build_commands: [] packages: - bash - buildah - curl - fuse-overlayfs - git - gzip - gnupg2 - iproute2 - iputils-ping - jq - dnsutils - libssl3 - lsb-release - openssh-client - ca-certificates - gnupg - slirp4netns - uidmap - sudo - software-properties-common - yq - zip custom_repos: [] extra_commands: - buildah --version copy: [] user: null entrypoint: null cmd: "/bin/bash" -
Skalowanie dla pozostałych kontenerów
Section titled “Skalowanie dla pozostałych kontenerów”- Wydanie wersji opentofu v1.0.0
- Utworzę jeszcze dwa obrazy z
pythonisemantic-release- Definicja repozytorium pl.rachuna-net/artifacts/containers/python
- Definicja repozytorium pl.rachuna-net/artifacts/containers/semantic-release
- Wydanie wersji python v1.0.0
- Wydanie wersji semantic-release v1.0.0