Jdi na navigaci

Vytváření images

Pomocí GitLab CI je možné automatizovaně vytvářet kontejnerové (docker) images a ty nahrávat do lokálního GitLab Container Registry.

Pro vytváření image doporučujeme použít nástroj buildah pomocí image ict/images/buildah viz Doporučený postup.

Připravili jsme pro vás image ict/images/buildah, který obsahuje nástroj buildah a některé kroky provede za vás.

Ukázka použití v .gitlab-ci.yml:

build:
  image: $CI_REGISTRY/ict/images/buildah:latest 1
  variables:
    IMAGE_TAG: my-image:latest  2
  script:
    - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_DEPENDENCY_PROXY_SERVER 3
    - buildah build --squash --from $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/alpine:latest --tag $IMAGE_TAG -f Dockerfile 4
    - buildah push $IMAGE_TAG $CI_REGISTRY_IMAGE/$IMAGE_TAG 5
  1. Alpine Linux s předkonfigurovaným nástrojem buildah, který nastaví prostředí[1] a přihlásí vás do $CI_REGISTRY.
  2. Název vašeho nového image
  3. Tento krok je potřeba POUZE, pokud v kroku 4 použijete --from $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX. Jedná se o přihlášení do GitLab dependency proxy.
  4. Příkaz, který sestaví image z alpine:latest, konfiguruje jej pomocí souboru Dockerfile, sloučí všechny vrstvy do jedné a označí ho tagem $IMAGE_TAG (obdoba příkazu docker build).[2]
  5. Příkaz, který pushne image do Container Registry aktuálního projektu.

Příklad souboru Dockerfile:

# Create from Docker Hub image alpine:v3.19.
# This gets overridden by 'buildah --from'
FROM alpine:3.20

# Install ca-certificates & curl
RUN apk update && apk add ca-certificates curl

# Set TimeZone variable to Europe/Prague
ENV TZ='Europe/Prague'

# set EU/Prague as localtime
RUN ln -sf /usr/share/zoneinfo/Europe/Prague /etc/localtime

Obecný postup

Obecný postup (bez použití buildah image výše) je následující:

  1. Nainstalovat balíčky buildah, fuse-overlayfs a netavark (Alpine v rámci minimalizace neinstaluje drivery pro síť a filesystem).
  2. Nastavit proměnnou prostředí BUILDAH_ISOLATION=chroot.[3]
  3. Přihlásit se do GitLab registry: buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY.
    1. Pokud má být image stavěn pomocí image z Docker Hubu a projekt je ve skupině, přihlásit se také k GitLab dependency proxy:
      buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_DEPENDENCY_PROXY_SERVER.
  4. Sestavit image, např.: buildah build --tag pkg:stable.
  5. Nahrát image do Registry: buildah push pkg:stable $CI_REGISTRY_IMAGE/pkg:stable.

Tipy

Spuštění příkazu v image

Pokud potřebujete image v rámci pipeline „spustit“ (tj. vytvořit z něj kontejner a v něm spustit příkaz), např. pro ověření funkčnosti, provedete to následovně:

ctr=$(buildah from $IMAGE_TAG)
buildah run $ctr -- command arg1 arg2 argn

  1. export BUILDAH_ISOLATION="chroot"
  2. Výchozí formát metadat image je OCI. Pokud z nějakého důvodu potřebujete zastaralý docker formát, použijte --format docker. Více viz dokumentace buildah.
  3. Platí pro Alpine Linux. Debian/Ubuntu tento krok nevyžaduje.