Go இல் டோக்கர் கொள்கலன்களை நிர்வகித்தல்

ஆவணப்படுத்தல்!

டோக்கர் ஹப் அல்லது ரெஜிஸ்ட்ரியில் இருந்து கொக்கிகளைப் பிடிக்க உங்கள் சொந்த பைக்கை எழுத முடிவு செய்யும் போது, ​​சர்வரில் உள்ள கண்டெய்னர்களை தானாக புதுப்பிக்க/இயக்க, உங்கள் கணினியில் டோக்கர் டீமானை நிர்வகிக்க உதவும் Docker Cli பயனுள்ளதாக இருக்கும்.
Go இல் டோக்கர் கொள்கலன்களை நிர்வகித்தல்

வேலை செய்ய, 1.9.4 க்குக் குறைவான கோ பதிப்பு தேவைப்படும்

நீங்கள் இன்னும் தொகுதிகளுக்கு மாறவில்லை என்றால், பின்வரும் கட்டளையுடன் Cli ஐ நிறுவவும்:

go get github.com/docker/docker/client

ஒரு கொள்கலனை இயக்குதல்

Docker API ஐப் பயன்படுத்தி ஒரு கொள்கலனை எவ்வாறு இயக்குவது என்பதை பின்வரும் எடுத்துக்காட்டு காட்டுகிறது. கட்டளை வரியில் நீங்கள் கட்டளையைப் பயன்படுத்துவீர்கள் docker 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)
}

இயங்கும் கொள்கலன்களின் பட்டியலைப் பெறுதல்

இந்த உதாரணம் கட்டளையை இயக்குவதற்கு சமம் 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")
    }
}

ஒரு கொள்கலனுக்கான பதிவுகளைக் காட்டுகிறது

நீங்கள் தனிப்பட்ட கொள்கலன்களுடன் வேலை செய்யலாம். பின்வரும் உதாரணம் குறிப்பிடப்பட்ட அடையாளங்காட்டியுடன் கொள்கலன் பதிவுகளைக் காட்டுகிறது. தொடங்குவதற்கு முன், நீங்கள் பெற விரும்பும் கன்டெய்னரின் ஐடியை மாற்ற வேண்டும்.

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

படங்களின் பட்டியலைப் பெறுதல்

இந்த உதாரணம் கட்டளையை இயக்குவதற்கு சமம் 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)
    }
}

இழு

இந்த உதாரணம் கட்டளையை இயக்குவதற்கு சமம் 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)
}

பயனர் அங்கீகாரத்துடன் படத்தைப் பதிவிறக்குகிறது

இந்த உதாரணம் கட்டளையை இயக்குவதற்கு சமம் docker pull, அங்கீகாரத்துடன்.

அங்கீகாரத் தரவு தெளிவான உரையில் அனுப்பப்படும். அதிகாரப்பூர்வ டோக்கர் பதிவு 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)
}

ஆதாரம்: www.habr.com

கருத்தைச் சேர்