Перейти к основному содержимому

Docker

Работа Docker выполняется на машине агента. Install и Build — actions; containers, networks и volumes — записи ресурсов с владельцами.

Установка и сборка

report, err := activity.Activity(ctx, agent, dockerlib.Install())

build, err := activity.Activity(ctx, agent, dockerlib.Build(dockerlib.BuildSpec{
Context: machine.Workspace() + "/src/app",
Tags: []string{"registry.example/app:sha"},
Push: true,
Target: "release",
BuildArgs: map[string]string{"VERSION": version},
CacheFrom: []string{"type=registry,ref=registry.example/app:cache"},
CacheTo: []string{"type=registry,ref=registry.example/app:cache,mode=max"},
}))

Install использует существующий engine или ставит его package manager'ом машины, затем публикует capability docker. Build использует Buildx/BuildKit машины и возвращает digest и tags. Пути должны быть действительны на машине; machine.Workspace() — общий same-path каталог.

Container

web := dockerlib.Container(ctx, agent, dockerlib.Spec{
Name: "web",
Config: &container.Config{Image: "nginx:alpine"},
Host: &container.HostConfig{
RestartPolicy: container.RestartPolicy{Name: container.RestartPolicyAlways},
},
Scrape: "http://localhost:9187/metrics",
}, pipeline.WithLabels(map[string]string{"role": "frontend"}))

id := web.Ready(ctx).Id

Config и Host — нативные Go-типы Docker. Декларация идемпотентна по имени: отсутствующий контейнер создаётся и запускается, остановленный — запускается. Scrape просит агент читать Prometheus endpoint и атрибутировать samples записи контейнера.

Network и volume

net := dockerlib.Network(ctx, agent, dockerlib.NetworkSpec{
Name: "private",
Options: network.CreateOptions{Driver: "bridge"},
})

data := dockerlib.Volume(ctx, agent, volume.CreateOptions{Name: "db-data"})

Оба используют нативные option structs Docker и сходятся по имени. Finalize удаляет Docker object; данные volume поэтому умирают вместе с владельцем. Чтобы ресурс пережил ран, передайте его stand.

Если агент принадлежит рану, Docker-ресурсы становятся его детьми. На attached agent они остаются детьми рана: чужая запись не может отвечать за ваши декларации.

Локальные тесты

Моделирование зависимостей и проверка пайплайна описаны в руководстве по локальным тестам.