docker SDK 的基本学习
```
package main
import(
"fmt"
"context"
"os"
"io"
// "reflect"
"time"
"github.com/docker/docker/client"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
// "github.com/docker/docker/pkg/stdcopy"
)
func main(){
t3:=time.Now()
fmt.Println("t3",t3)
fmt.Println("test")
ctx := context.Background()
fmt.Println("ctx",ctx)
cli,err := client.NewClientWithOpts(client.FromEnv)
if err!=nil{
panic(err)
}
fmt.Println(cli)
cli.NegotiateAPIVersion(ctx) //切换到于当前能够本机运行的API接口
fmt.Println(cli)
reader,err:=cli.ImagePull(ctx,"golang:alpine",types.ImagePullOptions{})
if err!=nil{
panic(err)
}
fmt.Println(reader)
writer,err:=io.Copy(os.Stdout,reader)
if err!=nil{
panic(err)
}
fmt.Println(writer)
//创建一个容器
resp, err := cli.ContainerCreate(ctx, &container.Config{
Hostname :"nodetest",
Image: "node",
Cmd: []string{"node", "/workspace/test.js"},
Tty: true,
}, &container.HostConfig{
Binds:[]string{"/home/ysm/nodetest:/workspace"},
}, nil, "")
if err!=nil{
panic(err)
}
fmt.Println(resp.ID)
fmt.Println(resp)
//运行一个容器
err = cli.ContainerStart(ctx,resp.ID, types.ContainerStartOptions{})
if err!=nil{
panic(err)
}
fmt.Println("this is a problem")
t1:= time.Now()
fmt.Println("t1",t1)
//容器状态
// container.WaitConditionNotRunning 等待不运行
// statusCh,errCh:= cli.ContainerWait(ctx,resp.ID,container.WaitConditionNotRunning )
// select{
// case err:=<-errCh:
// if err!=nil{
// panic(err)
// }
// case x,ok:=<-statusCh:
// fmt.Println("zhe ge shi",reflect.TypeOf(statusCh))
// if !ok{
// fmt.Println("zhe shi ge bu he ge de ren")
// }else{
// fmt.Println(x.StatusCode)
// }
// }
t2 := time.Now()
fmt.Println("t2",t2)
if t2.Sub(t1)>6{
fmt.Println("chao shi jian")
err = cli.ContainerStop(ctx,resp.ID,nil)
if err!=nil{
panic(err)
}
err = cli.ContainerRemove(ctx,resp.ID,types.ContainerRemoveOptions{Force:true})
if err!=nil{
panic(err)
}
return
}
//只有当容器结束之后才能获取到数据
out,err := cli.ContainerLogs(ctx,resp.ID,types.ContainerLogsOptions{ShowStdout:true,ShowStderr:true})
if err!=nil{
panic(err)
}
fmt.Println(out)
io.Copy(os.Stdout,out)
}
```
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)