Go ရဟိ Docker ကလန်တိန်နာမျာသကို စီမံခန့်ခလဲခဌင်သ။

စာရလက်စာတမ်သ

docker hub မဟချိတ်မျာသဖမ်သရန်အတလက် သို့မဟုတ် ဆာဗာပေါ်တလင် ကလန်တိန်နာမျာသကို အလိုအလျောက် update/run ပဌုလုပ်ရန်အတလက် registry မဟ သင့်ကိုယ်ပိုင်စက်ဘီသကို ရေသသာသရန် ဆုံသဖဌတ်သောအခါ၊ သင့်စနစ်ပေါ်ရဟိ Docker daemon ကို စီမံခန့်ခလဲရာတလင် အထောက်အကူဖဌစ်စေမည့် Docker Cli သည် အသုံသဝင်သည်ကို တလေ့ရဟိနိုင်သည်။
Go ရဟိ Docker ကလန်တိန်နာမျာသကို စီမံခန့်ခလဲခဌင်သ။

အလုပ်လုပ်ရန် သင်သည် Go ဗာသရဟင်သ 1.9.4 ထက်မနိမ့်ပါ။

မော်ဂျူသမျာသသို့ မပဌောင်သရသေသပါက၊ အောက်ပါ command ဖဌင့် Cli ကို ထည့်သလင်သပါ။

go get github.com/docker/docker/client

ကလန်တိန်နာကို ပဌေသသည်။

အောက်ဖော်ပဌပါ ဥပမာသည် Docker API ကို အသုံသပဌု၍ ကလန်တိန်နာတစ်ခုအာသ မည်သို့လုပ်ဆောင်ရမည်ကို ပဌသထာသသည်။ command line တလင်သင် command ကိုအသုံသပဌုသည်။ docker runသို့သော် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုတလင် ကတာဝန်ကို အလလယ်တကူကိုင်တလယ်ဖဌေရဟင်သနိုင်ပါသည်။
ကဥပမာသည် command ကို 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)
}

လုပ်ဆောင်နေသည့် ကလန်တိန်နာစာရင်သကို ရယူခဌင်သ။

ကဥပမာသည် command ကို run ခဌင်သနဟင့်ညီမျဟသည်။ 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")
    }
}

ကလန်တိန်နာတစ်ခုအတလက် မဟတ်တမ်သမျာသကို ပဌသခဌင်သ။

သင်တစ်ညသချင်သစီကလန်တိန်နာနဟင့်အတူအလုပ်လုပ်နိုင်ပါတယ်။ အောက်ဖော်ပဌပါ ဥပမာသည် သတ်မဟတ်ထာသသော အထောက်အထာသဖဌင့် ကလန်တိန်နာမဟတ်တမ်သမျာသကို ပဌသသည်။ မစတင်မီ၊ သင်သည် လက်ခံရယူလိုသော မဟတ်တမ်သမျာသရဟိသည့် ကလန်တိန်နာ၏ ID ကို ပဌောင်သလဲရန် လိုအပ်သည်။

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)
}

ပုံမျာသစာရင်သရယူခဌင်သ။

ကဥပမာသည် command ကို run ခဌင်သနဟင့်ညီမျဟသည်။ 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)
    }
}

ဆလဲပါ

ကဥပမာသည် command ကို run ခဌင်သနဟင့်ညီမျဟသည်။ 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)
}

အသုံသပဌုသူ စစ်မဟန်ကဌောင်သအထောက်အထာသဖဌင့် ပုံတစ်ပုံကို ဒေါင်သလုဒ်လုပ်ခဌင်သ။

ကဥပမာသည် command ကို run ခဌင်သနဟင့်ညီမျဟသည်။ 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)
    }

    // СПзЎаМОе кПМфОга с ЎаММыЌО Ўля аутеМтОфОкацОО
    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: www.habr.com

မဟတ်ချက် Add