Maareynta weelasha Docker ee Go

Dukumeenti!

Markaad go'aansato inaad qorto baaskiilkaaga si aad qabsatooyinka ka soo qaadato xuddunta docker ama diiwaanka si aad si toos ah u cusbooneysiiso / u socodsiiso weelasha server-ka, waxaad u heli kartaa Docker Cli mid waxtar leh, kaas oo kaa caawin doona maareynta Docker daemon ee nidaamkaaga.
Maareynta weelasha Docker ee Go

Si aad u shaqeyso waxaad u baahan doontaa nooca Go oo aan ka yarayn 1.9.4

Haddii aadan weli u wareegin qaybaha, ku rakib Cli oo wata amarka soo socda:

go get github.com/docker/docker/client

Ku ordaya weel

Tusaalaha soo socdaa wuxuu tusinayaa sida loo maamulo weelka iyadoo la isticmaalayo Docker API. Khadka taliska waxaad isticmaali lahayd amarka docker run, laakiin si fudud ayaan ula qabsan karnaa hawshan adeeggayaga.
Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}

Helitaanka liiska weelasha socda

Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
    }
}

Joojinta dhammaan weelasha socda

Marka aad barato sida loo sameeyo oo loo maamulo weelasha, waa waqtigii aad baran lahayd sida loo maareeyo. Tusaalaha soo socda ayaa joojin doona dhammaan weelasha socda.

Ha ku shaqeyn koodhkan wax soo saarka. server!

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

Muujinaya diiwaanka hal weel

Waxaad ku shaqayn kartaa weel gaar ah. Tusaalahan soo socdaa waxa uu muujinayaa diiwaannada weelka oo leh aqoonsi cayiman. Kahor intaadan bilaabin, waxaad u baahan tahay inaad beddesho aqoonsiga weelka aad rabto inaad hesho diiwaankiisa.

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

Helitaanka liiska sawirada

Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
    }
}

jiid

Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}

Soo dejinta sawir leh aqoonsiga isticmaalaha

Tusaalahani wuxuu u dhigmaa socodsiinta amarka docker pull, oo leh aqoonsi.

Xogta xaqiijinta waxa lagu soo diraa qoraal cad. Diiwaanka dockerka rasmiga ah wuxuu isticmaalaa HTTPS,
diiwaanka gaarka ah waa in sidoo kale loo habeeyaa si ay u gudbiyaan xogta iyadoo la isticmaalayo 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

U soo iibso martigelin lagu kalsoonaan karo oo loogu talagalay bogagga leh ilaalinta DDoS, VPS VDS servers 🔥 Iibso martigelin degel oo lagu kalsoonaan karo oo leh ilaalinta DDoS, VPS VDS servers | ProHoster