መንጠቆዎችን ከመክተቻው ማዕከል ወይም ከመዝገቡ ላይ ለመፃፍ ብስክሌትዎን ለመፃፍ ሲወስኑ ኮንቴይነሮችን በራስ ሰር ለማዘመን/በአገልጋዩ ላይ ለመጀመር Docker Cli በሲስተምዎ ላይ ያለውን የዶከር ዴሞን ለማስተዳደር ሊረዳዎ ይችላል።
ለመስራት የGo ስሪት ቢያንስ 1.9.4 ያስፈልግዎታል
አሁንም ወደ ሞጁሎች ካልተቀየሩ ክሊን በሚከተለው ትዕዛዝ ይጫኑ፡
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 ይጠቀማሉ፣
የግል መዝገቦች ኤችቲቲፒኤስን በመጠቀም ለመገናኘት መዋቀር አለባቸው።
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)
}
ምንጭ: hab.com