使用docker buildkit的go客户端,如何添加入口点?

时间:2019-10-22 16:33:28

标签: docker moby

出于精确控制构建的原因,我们直接使用新的构建套件(moby / buildkit)。因此没有Dockerfile。

我们正在创建一个类似于以下示例的脚本:https://github.com/moby/buildkit/blob/master/examples/buildkit0/buildkit.go

尽管它可以(很好),但是缺少文档。

如何添加入口点? (即要运行的默认命令)

如何设置容器启动时的默认工作目录?

如何设置要公开的端口?

2 个答案:

答案 0 :(得分:1)

BuildKit中的

LLB层不处理图像。它是构建结果的一个特定导出器。如果使用像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

答案 1 :(得分:0)

Tnis的答案实际上帮助我解决了这个问题。我也在此处发布了有关操作方法的示例。

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),
        },
    },
},