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.
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
- Alpine Linux s předkonfigurovaným nástrojem buildah, který nastaví prostředí[1] a přihlásí vás do
$CI_REGISTRY
. - Název vašeho nového image
- 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. - 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
).[2] - 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í:
- Nainstalovat balíčky
buildah
,fuse-overlayfs
anetavark
(Alpine v rámci minimalizace neinstaluje drivery pro síť a filesystem). - Nastavit proměnnou prostředí
BUILDAH_ISOLATION=chroot
.[3] - 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 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
.
- 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:
- Sestavit image, např.:
buildah build --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
export BUILDAH_ISOLATION="chroot"
↩- 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. ↩ - Platí pro Alpine Linux. Debian/Ubuntu tento krok nevyžaduje. ↩