Рубрики
Uncategorized

Строительство и толкание документов докера / OCI с аголой и канико

Сегодня общая потребность заключается в том, чтобы создать и нажать изображения Docker / OCI в вашей системе CI / CI. Один из основных я … Теги с CICD, Docker, Devops.

Сегодня общая потребность заключается в том, чтобы создать и нажать изображения 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»