yanom blog

様々な技術について書きます

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)
        }
}

とかすると、イメージの履歴が表示されるはずです。
その他様々関数があるので、今後も色々見ていきたいと思います。