介绍管理本地的码头工人
运行容器
后台运行容器
查看容器列表
码头工人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中的所有属性达到这个目的: