Как использовать docker buildkit's go client, как мне добавить точку входа? - PullRequest
0 голосов
/ 22 октября 2019

В целях точного контроля наших сборок мы используем новый buildkit (moby / buildkit) напрямую. Так что без Dockerfile.

Мы создаем скрипт, подобный этому примеру: https://github.com/moby/buildkit/blob/master/examples/buildkit0/buildkit.go

Пока он работает (замечательно), документации не хватает.

Как добавить точку входа? (т. е. команда по умолчанию для запуска)

и

Как установить рабочий каталог по умолчанию для запуска контейнера?

и

Как установитькакие порты выставить?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Слой LLB в BuildKit не работает с изображениями. Это один конкретный экспортер для результата сборки. Если вы используете внешний интерфейс, такой как Dockerfile, он подготовит конфигурацию образа для экспортера, а также вызовет сборку LLB. Если вы используете LLB напрямую, вам также необходимо создать конфигурацию образа. Если вы используете buildctl, это будет выглядеть примерно так: buildctl build --output 'type=docker,name=test,"containerimage.config={""Config"":{""Cmd"":[""bash""]}}"'

В Go API вы можете передать это с атрибутами ExportEntry https://godoc.org/github.com/moby/buildkit/client#ExportEntry. Формат изображения задокументирован в https://github.com/moby/moby/blob/master/image/spec/v1.2.md.

Обратите внимание, что вам не нужно заполнять RootFS в конфигурации изображения. BuildKit заполнит это автоматически. Дополнительная справочная информация https://github.com/moby/buildkit/issues/1041

0 голосов
/ 01 ноября 2019

Ответ Тыниса фактически помог мне решить его. Я также публикую здесь пример того, как это сделать.

config := Config{
    Cmd:        cmd,
    WorkingDir: "/opt/company/bin",
    ExposedPorts: map[string]struct{}{
        "80/tcp":   {},
        "8232/tcp": {},
    },
    Env: []string{"PATH=/opt/company/bin:" + system.DefaultPathEnv},
}
imgConfig := ImgConfig{
    Config: config,
}
configStr, _ := json.Marshal(imgConfig)

Exports: []client.ExportEntry{
    {
        Type: "image",
        Attrs: map[string]string{
            "name":                  manifest.Tag,
            "push":                  "true",
            "push-by-digest":        "false",
            "registry.insecure":     strconv.FormatBool(insecureRegistry),
            "containerimage.config": string(configStr),
        },
    },
},

...