Один из наиболее распространенных вариантов использования – это создание образа Docker с помощью Gitlab.
Использование docker-су для создания контейнера – хорошее решение, но в некоторых случаях может быть небезопасным.
Имея привилегии на использование команды docker, вы можете создать или удалить любой контейнер.
С отказом от dockershim в kubernetes эта опция больше не используется.
Для этого можно использовать несколько инструментов, но в данном случае я буду использовать Kaniko.
Что такое Kaniko?
kaniko создает образы контейнеров из Dockerfile внутри контейнера или кластера Kubernetes.
Он не зависит от демона Docker и выполняет каждую команду Dockerfile полностью в пространстве пользователя.
Это позволяет создавать образы контейнеров в средах, в которых невозможно легко или безопасно запустить демон Docker – например, в стандартных кластерах Kubernetes.
Сборка образов с помощью Kaniko
Чтобы собрать Docker-образы с помощью Kaniko в Kubernetes Gitlab runner, достаточно просто использовать его образ в качестве образа для задания сборки:
stages:
- build
- deploy_to_kubernetes
variables:
CACHE_TTL: 2190h0m0s # three months
IMAGE_NAME: app
before_script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$CI_DEPENDENCY_PROXY_SERVER\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
build-backend:
stage: build
tags:
- kubernetes
image:
name: gcr.io/kaniko-project/executor:v1.9.0-debug
entrypoint: [""]
script:
- /kaniko/executor \
--context "${CI_PROJECT_DIR}" \
--dockerfile "${CI_PROJECT_DIR}/Dockerfile" \
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${CI_COMMIT_TAG}" \
--cache-repo ${CONTAINER_REGISTRY}/${IMAGE_NAME} \
--cache=true \
--cache-ttl $CACHE_TTL
GitLab предоставляет функциональность для кэширования часто используемых образов.
Это поможет вам не превышать лимиты скорости Docker Hub.
Это также повысит производительность ваших сборок.
Чтобы включить Dependency Proxy, перейдите в родительскую группу вашего проекта Settings > Packages & Registries > Dependency Proxy
variables:
CACHE_TTL: 2190h0m0s # three months
IMAGE_NAME: app
before_script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$CI_DEPENDENCY_PROXY_SERVER\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
build-backend:
stage: build
tags:
- kubernetes
image:
name: $CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX/executor:v1.9.0-debug
entrypoint: [""]
script:
- /kaniko/executor \
--context "${CI_PROJECT_DIR}" \
--dockerfile "${CI_PROJECT_DIR}/Dockerfile" \
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${CI_COMMIT_TAG}" \
--registry-mirror "$CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX" \
--cache-repo ${CONTAINER_REGISTRY}/${IMAGE_NAME} \
--cache=true \
--cache-ttl $CACHE_TTL
см. также:
- 📜 Как обновить ключ подписи репозитория GitLab
- 🐳 Настройка Gitlab-CI раннера на своем собственном сервер
- 📜 Введение в GitLab CI / CD для начинающих
- 📜 Как пролить ветку используя git на Gitlab?
- 📜 В чем разница между Git Switch и git Checkout?