إدارة حاويات السفن في الذهاب

وثائق!


عندما تقرر أن تكتب دراجتك الخاصة من خلال التثبيت من مركز الإرساء أو من السجل لتحديث / إطلاق الحاويات تلقائيًا على الخادم ، فقد تحتاج إلى Docker Cli ، مما سيساعد في إدارة البرنامج الخفي Docker على نظامك.
صورة


للعمل ، ستحتاج إلى إصدار Go لا يقل عن 1.9.4


إذا كنت مازلت لم تحول إلى الوحدات النمطية ، فقم بتثبيت 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 pull reader, err := cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{}) if err != nil { panic(err) } io.Copy(os.Stdout, reader) hostBinding := nat.PortBinding{ HostIP: "0.0.0.0", HostPort: "8000", } containerPort, err := nat.NewPort("tcp", "80") if err != nil { panic("Unable to get the port") } portBinding := nat.PortMap{containerPort: []nat.PortBinding{hostBinding}} //      resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "alpine", Cmd: []string{"echo", "hello world"}, Tty: true, }, &container.HostConfig{ PortBindings: portBinding, }, nil, "") if err != nil { panic(err) } //   if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } //    out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) if err != nil { panic(err) } io.Copy(os.Stdout, out) } 

الحصول على قائمة الحاويات قيد التشغيل


هذا المثال يكافئ تشغيل 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) } //    (docker ps) containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{}) if err != nil { panic(err) } //     for _, container := range containers { fmt.Println(container.ID) } } 

وقف جميع الحاويات قيد التشغيل


بمجرد أن تتعلم كيفية إنشاء وتشغيل الحاويات ، فقد حان الوقت لمعرفة كيفية إدارتها. المثال التالي سيوقف جميع حاويات التشغيل.


لا تقم بتشغيل هذا الكود على خادم الإنتاج!

 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) } //    (docker ps) containers, err := cli.ContainerList(ctx, types.ContainerListOptions{}) if err != nil { panic(err) } for _, c := range containers { fmt.Print("Stopping container ", c.ID[:10], "... ") if err := cli.ContainerStop(ctx, c.ID, nil); err != nil { panic(err) } fmt.Println("Success") } } 

تسجيل حاوية واحدة


يمكنك العمل مع حاويات فردية. يعرض المثال التالي سجلات الحاوية ذات المعرف المحدد. قبل البدء ، تحتاج إلى تغيير معرف الحاوية التي تريد تلقي سجلاتها.


 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} //  id   out, err := cli.ContainerLogs(ctx, "f1064a8a4c82", options) if err != nil { panic(err) } io.Copy(os.Stdout, out) } 

الحصول على قائمة الصور


هذا المثال يعادل تشغيل 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) } //    images, err := cli.ImageList(context.Background(), types.ImageListOptions{}) if err != nil { panic(err) } for _, image := range images { fmt.Println(image.ID) } } 

سحب


هذا المثال يكافئ تشغيل 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 alpine out, err := cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{}) if err != nil { panic(err) } defer out.Close() io.Copy(os.Stdout, out) } 

قم بتنزيل الصورة باستخدام مصادقة المستخدم


هذا المثال يكافئ تشغيل docker pull مع المصادقة.


يتم إرسال بيانات المصادقة في نص واضح. يستخدم السجل الرسمي لرسو السفن 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) } //       authConfig := types.AuthConfig{ Username: "username", Password: "password", } encodedJSON, err := json.Marshal(authConfig) if err != nil { panic(err) } authStr := base64.URLEncoding.EncodeToString(encodedJSON) out, err := cli.ImagePull(ctx, "docker.io/library/alpine", types.ImagePullOptions{RegistryAuth: authStr}) if err != nil { panic(err) } defer out.Close() io.Copy(os.Stdout, out) } 

Source: https://habr.com/ru/post/ar449038/


All Articles