Bainistiú coimeádáin Docker in Go

Doiciméadú!

Nuair a shocraíonn tú do rothar féin a scríobh chun crúcaí a ghabháil ón mol docker nó ón gclárlann chun coimeádáin a nuashonrú / a rith go huathoibríoch ar an bhfreastalaí, seans go mbeidh an Docker Cli úsáideach duit, a chabhróidh leat an deamhan Docker a bhainistiú ar do chóras.
Bainistiú coimeádáin Docker in Go

Le bheith ag obair beidh ort leagan Téigh nach bhfuil níos ísle ná 1.9.4

Mura bhfuil tú tar éis athrú go modúil fós, suiteáil Cli leis an ordú seo a leanas:

go get github.com/docker/docker/client

Coimeádán a rith

Léiríonn an sampla seo a leanas conas coimeádán a rith ag baint úsáide as API Docker. Ar an líne ordaithe d'úsáidfeá an t-ordú docker run, ach is féidir linn dul i ngleic go héasca leis an tasc seo inár seirbhís.
Tá an sampla seo comhionann leis an ordú a rith 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)
}

Faigh liosta de na coimeádáin reatha

Tá an sampla seo comhionann leis an ordú a rith 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)
    }
}

Stopadh gach coimeádán ag rith

Nuair a bheidh sé foghlamtha agat conas coimeádáin a chruthú agus a rith, tá sé in am agat foghlaim conas iad a bhainistiú. Stopfaidh an sampla seo a leanas gach coimeádán reatha.

Ná rith an cód seo ar fhreastalaí táirgeachta!

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

Ag taispeáint logaí do choimeádán amháin

Is féidir leat oibriú le coimeádáin aonair. Taispeánann an sampla seo a leanas logaí coimeádán leis an aitheantóir sonraithe. Sula dtosaíonn tú, ní mór duit ID an choimeádáin a bhfuil a logaí is mian leat a fháil a athrú.

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

Faigh liosta íomhánna

Tá an sampla seo comhionann leis an ordú a rith 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)
    }
}

Tarraingt

Tá an sampla seo comhionann leis an ordú a rith 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)
}

Íosluchtaigh íomhá le fíordheimhniú úsáideora

Tá an sampla seo comhionann leis an ordú a rith docker pull, le fíordheimhniú.

Seoltar sonraí fíordheimhnithe i dtéacs soiléir. Úsáideann an chlár docker oifigiúil HTTPS,
ní mór clárlanna príobháideacha a chumrú freisin chun sonraí a aistriú trí úsáid a bhaint as 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)
}

Foinse: will.com

Add a comment