Go ನಲ್ಲಿ ಡಾಕರ್ ಕಂಟೈನರ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು

ದಾಖಲೆ!

ಡಾಕರ್ ಹಬ್‌ನಿಂದ ಅಥವಾ ನೋಂದಾವಣೆಯಿಂದ ಕೊಕ್ಕೆಗಳನ್ನು ಹಿಡಿಯಲು ನಿಮ್ಮ ಸ್ವಂತ ಬೈಕು ಬರೆಯಲು ನೀವು ನಿರ್ಧರಿಸಿದಾಗ, ಸರ್ವರ್‌ನಲ್ಲಿ ಕಂಟೇನರ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸಲು/ರನ್ ಮಾಡಲು, ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುವ ಡಾಕರ್ ಕ್ಲೈ ನಿಮಗೆ ಉಪಯುಕ್ತವಾಗಬಹುದು.
Go ನಲ್ಲಿ ಡಾಕರ್ ಕಂಟೈನರ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದು

ಕೆಲಸ ಮಾಡಲು ನಿಮಗೆ 1.9.4 ಕ್ಕಿಂತ ಕಡಿಮೆಯಿಲ್ಲದ ಗೋ ಆವೃತ್ತಿಯ ಅಗತ್ಯವಿದೆ

ನೀವು ಇನ್ನೂ ಮಾಡ್ಯೂಲ್‌ಗಳಿಗೆ ಬದಲಾಯಿಸದಿದ್ದರೆ, ಈ ಕೆಳಗಿನ ಆಜ್ಞೆಯೊಂದಿಗೆ Cli ಅನ್ನು ಸ್ಥಾಪಿಸಿ:

go get github.com/docker/docker/client

ಧಾರಕವನ್ನು ನಡೆಸುವುದು

ಕೆಳಗಿನ ಉದಾಹರಣೆಯು ಡಾಕರ್ 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")
    }
}

ಒಂದೇ ಕಂಟೇನರ್‌ಗಾಗಿ ಲಾಗ್‌ಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ

ನೀವು ಪ್ರತ್ಯೇಕ ಪಾತ್ರೆಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಬಹುದು. ಕೆಳಗಿನ ಉದಾಹರಣೆಯು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಗುರುತಿಸುವಿಕೆಯೊಂದಿಗೆ ಕಂಟೇನರ್ ಲಾಗ್‌ಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನೀವು ಸ್ವೀಕರಿಸಲು ಬಯಸುವ ಲಾಗ್‌ಗಳ ಕಂಟೇನರ್‌ನ ID ಅನ್ನು ನೀವು ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ.

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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ