码头工人API如何在Golang中使用

  介绍

码头工人API如何在Golang中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

安装SDK

通过下面的命令就可以安装SDK了:

go  get github.com/docker/docker/client

管理本地的码头工人

该部分会介绍如何使用Golang +码头工人API进行管理本地的码头工人。

运行容器

第一个例子将展示如何运行容器,相当于码头工人码头工人。io/图书馆/高山回声“你好world":

package 主要      import  (   ,“context"   ,“无力偿贷;   ,“os"      ,“;github.com/docker/docker/api/types"   ,“;github.com/docker/docker/api/types/container"   ,“;github.com/docker/docker/client"   ,“;github.com/docker/docker/pkg/stdcopy"   )      func  main (), {   ,ctx :=, context.Background ()   ,cli, err :=, client.NewClientWithOpts (client.FromEnv, client.WithAPIVersionNegotiation ())   ,if  err  !=, nil  {   ,恐慌(err)   ,}      ,读者,err :=, cli.ImagePull (ctx,,“docker.io/图书馆/alpine",, types.ImagePullOptions {})   ,if  err  !=, nil  {   ,恐慌(err)   ,}   ,io.Copy (os.Stdout,读者)      职责的不同之处是,err :=, cli.ContainerCreate (ctx,,, container.Config {   ,形象:“alpine",   字符串,Cmd: [] {“echo",,“hello  world"},   ,},,nil, nil,,,,)   ,if  err  !=, nil  {   ,恐慌(err)   ,}      ,if  err :=, cli.ContainerStart (ctx, resp.ID,, types.ContainerStartOptions {});, err  !=, nil  {   ,恐慌(err)   ,}      ,statusCh, errCh :=, cli.ContainerWait (ctx, resp.ID,, container.WaitConditionNotRunning)   ,select  {   ,case  err :=, & lt; -errCh:   ,if  err  !=, nil  {   恐慌(err)才能   ,}   ,case  & lt; -statusCh:   ,}      ,,err :=, cli.ContainerLogs (ctx, resp.ID,, types.ContainerLogsOptions {ShowStdout:,真的})   ,if  err  !=, nil  {   ,恐慌(err)   ,}      ,stdcopy.StdCopy (os.Stdout, os.Stderr,,)   }

后台运行容器

还可以在后台运行容器,相当于码头工人运行- d bfirsh/reticulate-splines:

package 主要      import  (   ,“context"   ,“fmt"   ,“无力偿贷;   ,“os"      ,“;github.com/docker/docker/api/types"   ,“;github.com/docker/docker/api/types/container"   ,“;github.com/docker/docker/client"   )      func  main (), {   ,ctx :=, context.Background ()   ,cli, err :=, client.NewClientWithOpts (client.FromEnv, client.WithAPIVersionNegotiation ())   ,if  err  !=, nil  {   ,恐慌(err)   ,}      ,imageName :=,“bfirsh/reticulate-splines"      ,,err :=, cli.ImagePull (ctx, imageName,, types.ImagePullOptions {})   ,if  err  !=, nil  {   ,恐慌(err)   ,}   ,io.Copy (os.Stdout,,)      职责的不同之处是,err :=, cli.ContainerCreate (ctx,,, container.Config {   ,图片:imageName,   ,},,nil, nil,,,,)   ,if  err  !=, nil  {   ,恐慌(err)   ,}      ,if  err :=, cli.ContainerStart (ctx, resp.ID,, types.ContainerStartOptions {});, err  !=, nil  {   ,恐慌(err)   ,}      ,fmt.Println (resp.ID)   }

查看容器列表

列出正在运行的容器,就像使用码头工人ps一样:

package 主要      import  (   ,“context"   ,“fmt"      ,“;github.com/docker/docker/api/types"   ,“;github.com/docker/docker/client"   )      func  main (), {   ,ctx :=, context.Background ()   ,cli, err :=, client.NewClientWithOpts (client.FromEnv, client.WithAPIVersionNegotiation ())   ,if  err  !=, nil  {   恐慌(err)才能   ,}      ,容器,err :=, cli.ContainerList (ctx, types.ContainerListOptions {})   ,if  err  !=, nil  {   恐慌(err)才能   ,}      ,for  _, container :=, range  containers  {   fmt.Println才能(container.ID)   ,}   }

如果是码头工人ps - a,我们可以通过修改类型。ContainerListOptions中的所有属性达到这个目的:

码头工人API如何在Golang中使用