ドキュメンテーション!
Dockerハブまたはレジストリからフックをキャッチしてサーバー上のコンテナーを自動的に更新/起動する独自の自転車を作成する場合、Docker Cliを使用して、システム上のDockerデーモンを管理できます。
作業には、1.9.4以上のGoバージョンが必要です。
まだモジュールに切り替えていない場合は、次のコマンドでCliをインストールします。
go get github.com/docker/docker/client
コンテナ打ち上げ
次の例は、Docker APIを使用してコンテナーを開始する方法を示しています。 コマンドラインでは、 docker run
を使用しますが、サービスでこのタスクに簡単に対処できます。
この例は、 docker run alpine echo hello world
を実行するのと同等です
package main { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) }
実行中のコンテナのリストを取得する
この例は、 docker ps
実行と同等です
package main import ( "context" "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { cli, err := client.NewEnvClient() if err != nil { panic(err) }
実行中のコンテナをすべて停止します
コンテナを作成して実行する方法を学んだら、それらを管理する方法を学びます。 次の例は、実行中のすべてのコンテナを停止します。
本番サーバーでこのコードを実行しないでください!
package main import ( "context" "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) }
単一のコンテナのロギング
個々のコンテナで作業できます。 次の例は、指定された識別子を持つコンテナのログを表示します。 開始する前に、ログを受信するコンテナの識別子を変更する必要があります。
package main import ( "context" "io" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) } options := types.ContainerLogsOptions{ShowStdout: true}
画像のリストを取得する
この例は、 docker image ls
実行と同等です
package main import ( "context" "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { cli, err := client.NewEnvClient() if err != nil { panic(err) }
引く
この例は、 docker pull
を実行するのと同等です
package main import ( "context" "io" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) }
ユーザー認証を使用したイメージのダウンロード
この例は、認証を使用してdocker pull
を実行するのと同等です。
認証データはクリアテキストで送信されます。 公式のdockerレジストリはHTTPSを使用し、
HTTPSを使用してデータを送信するようにプライベートレジストリも構成する必要があります。
package main import ( "context" "encoding/base64" "encoding/json" "io" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) func main() { ctx := context.Background() cli, err := client.NewEnvClient() if err != nil { panic(err) }