Ka mālama ʻana i nā pahu Docker ma Go

Palapala!

Ke hoʻoholo ʻoe e kākau i kāu kaʻa ponoʻī no ka hopu ʻana i nā makau mai ka docker hub a i ʻole ke kākau inoa e hoʻohou hou / holo i nā pahu ma ka kikowaena, hiki iā ʻoe ke ʻike i ka Docker Cli pono, e kōkua i ka mālama ʻana i ka daemon Docker ma kāu ʻōnaehana.
Ka mālama ʻana i nā pahu Docker ma Go

No ka hana, pono ʻoe i ka mana Go ma lalo o 1.9.4

Inā ʻaʻole ʻoe i hoʻololi i nā modules, e hoʻokomo iā Cli me kēia kauoha:

go get github.com/docker/docker/client

Holo i kahi ipu

Hōʻike kēia hiʻohiʻona pehea e holo ai i kahi pahu me ka hoʻohana ʻana i ka Docker API. Ma ka laina kauoha e hoʻohana ʻoe i ke kauoha docker run, akā hiki iā mākou ke hoʻokō maʻalahi i kēia hana i kā mākou lawelawe.
Ua like kēia laʻana me ka holo ʻana i ke kauoha 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)
}

Loaʻa i kahi papa inoa o nā pahu holo

Ua like kēia laʻana me ka holo ʻana i ke kauoha 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)
    }
}

Ke hooki nei i na ipu holo a pau

Ke aʻo ʻoe i ka hana ʻana a me ka holo ʻana i nā ipu, ʻo ia ka manawa e aʻo ai pehea e hoʻokele ai. ʻO ka laʻana ma lalo nei e hoʻopau i nā ipu holo āpau.

Mai holo i kēia code ma kahi kikowaena hana!

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

Hōʻike i nā lāʻau no ka pahu hoʻokahi

Hiki iā ʻoe ke hana me nā pahu pākahi. Hōʻike ka laʻana ma lalo nei i nā pahu pahu me ka mea hōʻike ʻike. Ma mua o ka hoʻomaka ʻana, pono ʻoe e hoʻololi i ka ID o ka pahu nona nā lāʻau āu e makemake ai e loaʻa.

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

Loaʻa i kahi papa inoa o nā kiʻi

Ua like kēia laʻana me ka holo ʻana i ke kauoha 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)
    }
}

huki

Ua like kēia laʻana me ka holo ʻana i ke kauoha 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)
}

Ke hoʻoiho ʻana i kahi kiʻi me ka hōʻoia o ka mea hoʻohana

Ua like kēia laʻana me ka holo ʻana i ke kauoha docker pull, me ka hooiaio.

Hoʻouna ʻia ka ʻikepili hōʻoia ma ka kikokikona maopopo. Ke hoʻohana nei ka papa inoa docker i ka HTTPS,
Pono e hoʻonohonoho pono ʻia nā inoa inoa pilikino e hoʻololi i ka ʻikepili me ka hoʻohana ʻana i 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

Pākuʻi i ka manaʻo hoʻopuka