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.
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 (nastavení prostředí, přihlášení do GitLab Registry a dependency proxy).
build:
image: $CI_REGISTRY/ict/images/buildah/alpine:latest 1
variables:
IMAGE_TAG: my-image:latest 2
script:
- buildah build --squash --from $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/alpine:latest --tag $IMAGE_TAG -f Dockerfile 3
- buildah push $IMAGE_TAG $CI_REGISTRY_IMAGE/$IMAGE_TAG 4
- Alpine Linux s předkonfigurovaným nástrojem buildah
- Název image
- 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říkazudocker build
). [1] - Příkaz, který pushne image do "Container Registry" aktuálního projektu.
Obecný postup
Obecný postup (bez použití buildah image výše) je následující:
Nainstalovat balíček
buildah
.Důležité:
U Alpine v3.18 je nutné doinstalovat balíček fuse-overlayfs, jelikož již není závislost buildah.
Důrazně nedoporučujeme používat ovladačvfs
, místo toho použijte prosím ovladačoverlay
!- Nastavit proměnnou prostředí
BUILDAH_ISOLATION=chroot
.[2] - Přihlásit se do GitLab registry:
buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
.- Pokud má být image stavěn pomocí image z Docker Hubu, přihlásit se také k GitLab dependency proxy:
buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_DEPENDENCY_PROXY_SERVER
.
- Pokud má být image stavěn pomocí image z Docker Hubu, přihlásit se také k GitLab dependency proxy:
- Sestavit image, např.:
buildah build --squash --tag pkg:stable
. - 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
- 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. ↩ - Tento krok je prozatím potřeba pouze u Alpine linuxu. ↩