Goでdocker SDKを試してみる 1
参考
試してみる
基本的には、Develop with Docker Engine SDKs and API を参考に進めれば良いです。
今回は以下のようなコードを作成しました。
package main import ( "context" "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { //cli, err := client.NewEnvClient() // 以下のエラーが発生した // panic: Error response from daemon: client version 1.39 is too new. Maximum supported API version is 1.38 cli, err := client.NewClientWithOpts(client.WithVersion("1.38")) // 環境に合わせて修正すること if err != nil { panic(err) } containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) if err != nil { panic(err) } for _, container := range containers { fmt.Printf("%s %s\n", container.ID[:10], container.Image) } }
これを、コンパイルした後実行すると、
コンテナIDと作成元のイメージ名が表示されるはずです。
エラーとなった場合は、管理者権限で実行してみてください。
package main import ( "context" "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { //cli, err := client.NewEnvClient() cli, err := client.NewClientWithOpts(client.WithVersion("1.38")) //ここを修正 if err != nil { panic(err) } containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) if err != nil { panic(err) } //for _, container := range containers { // fmt.Printf("%s %s %s\n", container.ID[:10], container.Image, container.ImageID) //} historys, err := cli.ImageHistory(context.Background(), containers[0].ImageID) if err != nil { panic(err) } for _, hist := range historys { fmt.Printf("%s %s\n", hist.ID, hist.CreatedBy) } }
とかすると、イメージの履歴が表示されるはずです。
その他様々関数があるので、今後も色々見ていきたいと思います。