Сегодня общая потребность заключается в том, чтобы создать и нажать изображения Docker/OCI в вашей системе CI/CI. Одним из основных проблем пользователей сталкиваются с тем, как это создать изображения внутри контейнера (Agola по умолчанию использует контейнеры для выполнения задач запуска). Обычно это требует использования Docker-In-Docker и так привилегированные контейнеры или связывают установить сокет Host Docker. Эти варианты могут столкнуться с некоторыми проблемами безопасности или разбить контейнерную изоляцию.
С Agola вы можете создавать и нажать изображения Docker/OCI, не разбивая контейнерную изоляцию благодаря инструментам, как канико .
Есть пример репозитория здесь Это содержит простую программу GO, которая будет построен и помещен в изображение Docker/OCI.
Создание изображения
Давайте пройдем через Первое определение запуска В этом примере (формат конфигурации Agola, используемый в этом примере, является YAML
Формат. Но для более продвинутых определений вы можете использовать jsonnet формат):
version: v0 runs: - name: build image tasks: - name: build runtime: containers: - image: golang:1.12-stretch steps: - clone: - run: name: build the program command: go build . # Copy the built binary and the Dockerfile to the workspace - save_to_workspace: contents: - source_dir: . dest_dir: /bin/ paths: - agola-example-kaniko - source_dir: . dest_dir: / paths: - Dockerfile - .dockerignore - name: build docker image runtime: containers: - image: gcr.io/kaniko-project/executor:debug shell: /busybox/sh working_dir: /workspace steps: - restore_workspace: dest_dir: . - run: /kaniko/executor --no-push depends: - build
Это определение запуска построит программу GO, а затем создать изображение, не нажав его.
Это пробег из двух задач, первый проведет код и построить двоичный файл. Тогда это скопирует двоичный и Dockerfile
в запустить рабочее пространство Отказ Построить изображение докера
Задача будет выполнять канико и построить изображение.
Построить изображение докера
Задача использует официальный gcr.io/kaniko-project/EXECUTORCHUTRECTORCEDDEBUG
изображение. Изображение с отладочной тегом используется, поскольку он также обеспечивает оболочку Batebox (полезно для целей отладки). Мы должны переопределить оболочку по умолчанию, поскольку в этом изображении двоичные файлы Bitebox находятся в /busybox/
каталог. Канико по умолчанию ожидает «контекст Docker» внутри /рабочая среда
Итак, мы будем использовать Whoad_dir
Возможность задачи, чтобы установить его.
Здание и толкание изображения
Обычно создавая изображение, не нажав его в реестр, не очень полезен, поэтому давайте посмотрим, что изменения, необходимые для того, чтобы также нажать на изображение.
Мы просто должны добавить несколько строк к Построить изображение докера
задача.
Канико документирует несколько способов аутентификации реестра GCR и AWS и его изображения уже включают помощника для учетных данных для Amazon ECR. Для получения дополнительной информации обратитесь к Kaniko DOC.
Для Dockerhub или ваш собственный реестр вы должны создать докер config.json
Конфигурация файла (внутри /kaniko/.docker/config.json
) с необходимыми данными AUTH.
version: v0 runs: - name: build and push image tasks: - name: build [...] - name: build docker image runtime: containers: - image: gcr.io/kaniko-project/executor:debug environment: DOCKERREGISTRY_URL: "https://index.docker.io/v1/" DOCKERAUTH: from_variable: dockerauth shell: /busybox/sh working_dir: /workspace steps: - restore_workspace: dest_dir: . - run: name: generate docker config command: | cat << EOF > /kaniko/.docker/config.json { "auths": { "$DOCKERREGISTRY_URL": { "auth" : "$DOCKERAUTH" } } } EOF # build and push with kaniko. You can add more than one --destination option. - run: /kaniko/executor --destination your/image:tag depends: - build
Переменная среды Докерату
Заселяется из переменной, определенной внутри проектной группы/проекта Agola, а для этого примера Dockerregistry_url
Значение определяется в определении выполнения.
Как записка, благодаря мощным Система Secrets/Переменные Agola , вы можете сопоставить различные переменные на основе различных условий (филиал, тег, запрос на тягу), чтобы вы могли повторно использовать одно и то же определение выполнения и использовать различные реестры и аутенты для своих филиалов разработки, запрос на потяну, главная ветвь или теги
Оригинал: «https://dev.to/sgotti/building-and-pushing-docker-oci-images-with-agola-and-kaniko-1ihk»