docker堆栈使用客户端API部署

我正在玩docker的客户端API 。 我已经看到了如何运行容器,推,拉等。现在我想用一个组合文件来部署一个堆栈,但我不认为有一个one-func调用来做到这一点(不是在客户端API )。 我走了docker的代码,看到他们如何做到这一点 。

这是唯一的方法吗? 我试图将依赖关系保持在最低限度,但如果没有其他选项,我想我可以忍受它。 另外我对golang还是比较新的,所以如果有人能提供一个例子,我怎么才能实现docker stack deploy --compose-file file.yml虽然去代码将不胜感激。

经过一些更多的研究,我想我有三个select:

  1. 只需使用os / exec包和exec.Command("docker", ...) 。 这是好的,但它需要docker客户端

  2. 使用docker / client包提供的东西,并自己实现这个调用。 这给你最大的控制,但你需要实现复合调用(docker堆栈部署),例如创build图像,networking,启动容器等。

  3. 使用docker / cli / command包提供的命令 。 这样你也可以访问一些可能被覆盖的configuration,你让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() }