Skip to content
GitLabGitHub

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.

  • 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.

  1. Definicja repozytorium pl.rachuna-net/artifacts/containers/buildah

  2. 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"]
  3. Dokładny kod znajdziesz tutaj

  4. 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"