2017-02-10 58 views
1

我在使用碼頭的client api。我已經看到了如何運行容器,推,拉等。現在我想用一個組合文件部署一個堆棧,但我認爲不存在一個one-func-call來做到這一點(反正不在客戶端api中)。我去槽docker的代碼,看到how they do it使用客戶端API進行碼頭堆棧部署

這是唯一的方法嗎?我試圖將依賴關係保持在最低限度,但如果沒有其他選項,我想我可以忍受它。另外我對golang還很新,所以如果有人能提供一個例子,我怎樣才能達到docker stack deploy --compose-file file.yml雖然去代碼將不勝感激。

+0

部署Go代碼,從寫在旅途中爲您服務打造泊塢窗容器。如果你問的是配合,比你可以使用kubernetes或Swarm。如果你想要部署自動化工具,你應該看看一個合理的。 – Altenrion

+0

@Altenrion我的目標是從我自己的應用程序中執行docker命令(特別是docker stack deploy),我想知道什麼是最好的方法。目前我正在查看docker/cli/command包,我認爲這是最接近我需要的 – yasko

回答

0

一些更多的研究,我想後,我有3種選擇:

  1. 只需使用OS/EXEC包和exec.Command("docker", ...)。這是好的,但它需要碼頭客戶端

  2. 使用由docker/client包提供的東西,並自己實現呼叫。這給了你最大的控制權,但你需要實現組合調用(docker stack deploy),例如創建映像,網絡,啓動容器等。

  3. 使用docker/cli/command軟件包提供的命令。通過這種方式,您還可以訪問一些可能會被覆蓋的配置,並允許泊塢員們擔心複合調用。

最後我用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() 
}