我正在玩Docker的client api。我已经看过如何运行容器,推送,拉动等等。现在我想部署一个带有compose文件的堆栈,但我认为没有一个函数调用(不是在客户端api中) )。我通过码头工人的代码看了how they do it。
这是唯一的方法吗?我试图将依赖关系保持在最低限度,但如果没有其他选项,我想我可以忍受它。另外我还是golang的新手,所以如果有人能提供一个如何实现docker stack deploy --compose-file file.yml
的例子,那么我将非常感谢代码。
答案 0 :(得分:2)
经过一些研究后,我认为我有3个选择:
只使用os / exec包和exec.Command("docker", ...)
。这没关系,但它需要docker客户端
使用docker/client包提供的内容并自行实施调用。这为您提供了最大的控制权,但您需要实现复合调用(docker stack deploy),例如创建图像,网络,启动容器等
使用docker/cli/command包提供的命令。通过这种方式,您还可以访问一些可以覆盖的配置,并让docker们担心复合调用。
我最终使用了#3,这是我的代码:
import (
"os"
"github.com/docker/docker/cli/command"
"github.com/docker/docker/cli/command/stack"
"github.com/docker/docker/cli/flags"
)
func main() {
cli := command.NewDockerCli(os.Stdin, os.Stdout, os.Stderr)
cli.Initialize(flags.NewClientOptions())
cmd := stack.NewStackCommand(cli)
// the command package will pick up these, but you could override if you need to
// cmd.SetArgs([]string{"deploy", "--compose-file", "compose.yml", "mystack"})
cmd.Execute()
}