docker stack使用客户端api进行部署

时间:2017-02-10 09:36:04

标签: go docker

我正在玩Docker的client api。我已经看过如何运行容器,推送,拉动等等。现在我想部署一个带有compose文件的堆栈,但我认为没有一个函数调用(不是在客户端api中) )。我通过码头工人的代码看了how they do it

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

1 个答案:

答案 0 :(得分:2)

经过一些研究后,我认为我有3个选择:

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

  2. 使用docker/client包提供的内容并自行实施调用。这为您提供了最大的控制权,但您需要实现复合调用(docker stack deploy),例如创建图像,网络,启动容器等

  3. 使用docker/cli/command包提供的命令。通过这种方式,您还可以访问一些可以覆盖的配置,并让docker们担心复合调用。

  4. 我最终使用了#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()
    }