Te whakahaere i nga ipu Docker i Go

Tuhinga!

Ina whakatau koe ki te tuhi i to paihikara ki te hopu matau mai i te docker hub, mai i te rehita ranei ki te whakahou aunoa/tīmata ipu i runga i te tūmau, ka kitea e koe he whai hua te Docker Cli hei awhina i te whakahaere i te Docker daemon i runga i to punaha.
Te whakahaere i nga ipu Docker i Go

Hei mahi, me hiahia koe ki te putanga Haere i te iti rawa 1.9.4

Mena kaore koe i huri ki nga waahanga, whakauruhia a Cli me te whakahau e whai ake nei:

go get github.com/docker/docker/client

Te whakahaere ipu

Ko te tauira e whai ake nei e whakaatu ana me pehea te whakahaere ipu ma te whakamahi i te Docker API. I runga i te raina whakahau, ka whakamahi koe i te whakahau docker run, e nehenehe râ tatou e faaruru ohie noa i teie ohipa i roto i ta tatou taviniraa.
He rite tenei tauira ki te whakahaere i te whakahau 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)
}

Te tiki rarangi o nga ipu rere

He rite tenei tauira ki te whakahaere i te whakahau 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)
    }
}

Kati nga ipu rere katoa

Inaianei kua ako koe ki te hanga me te whakahaere ipu, kua tae ki te wa ki te ako me pehea te whakahaere. Ko te tauira e whai ake nei ka mutu nga ipu rere katoa.

Kaua e whakahaere i tenei waehere ki runga i te tūmau whakaputa!

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

Nga raarangi whakaputa o te ipu kotahi

Ka taea e koe te mahi me nga ipu takitahi. Ko te tauira e whai ake nei ka ta i nga rakau o te ipu me te ID kua tohua. I mua i te tiimata, me whakarereke e koe te ID o te ipu e hiahia ana koe ki te tiki.

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

Te tiki rarangi whakaahua

He rite tenei tauira ki te whakahaere i te whakahau 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)
    }
}

Kumea

He rite tenei tauira ki te whakahaere i te whakahau 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)
}

Tikiake ana i tetahi atahanga me te motuhēhēnga kaiwhakamahi

He rite tenei tauira ki te whakahaere i te whakahau docker pull, me te motuhēhēnga.

Ka tukuna nga raraunga motuhēhēnga i roto i te tuhinga mārama. Ko nga rehita docker mana e whakamahi ana i te HTTPS,
Me whirihora hoki nga rehita motuhake ki te whakawhitiwhiti ma te whakamahi i te 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: will.com

Tāpiri i te kōrero