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