Nigbati o ba pinnu lati kọ keke rẹ lati mu awọn kio lati ibudo docker tabi lati iforukọsilẹ lati ṣe imudojuiwọn laifọwọyi / bẹrẹ awọn apoti lori olupin, o le rii pe Docker Cli wulo lati ṣe iranlọwọ ṣakoso daemon Docker lori ẹrọ rẹ.
Lati ṣiṣẹ, o nilo ẹya Go o kere ju 1.9.4
Ti o ko ba ti yipada si awọn modulu, fi Cli sori ẹrọ pẹlu aṣẹ atẹle:
go get github.com/docker/docker/client
Nṣiṣẹ a eiyan
Apẹẹrẹ atẹle n fihan bi o ṣe le ṣiṣẹ apoti kan nipa lilo API Docker. Lori laini aṣẹ, iwọ yoo lo aṣẹ naa docker run
, ṣugbọn a le ni irọrun farada iṣẹ yii ni iṣẹ wa.
Apẹẹrẹ yii jẹ deede si ṣiṣe pipaṣẹ naa 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)
}
Ngba akojọ kan ti nṣiṣẹ awọn apoti
Apẹẹrẹ yii jẹ deede si ṣiṣe pipaṣẹ naa 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)
}
}
Duro gbogbo awọn apoti ti nṣiṣẹ
Ni kete ti o ti kọ bi o ṣe le ṣẹda ati ṣiṣe awọn apoti, o to akoko lati kọ ẹkọ bi o ṣe le ṣakoso wọn. Apẹẹrẹ atẹle yoo da gbogbo awọn apoti ti nṣiṣẹ duro.
Maṣe ṣiṣẹ koodu yii lori olupin iṣelọpọ!
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")
}
}
Awọn akọọlẹ ti o jade ti eiyan kan
O le ṣiṣẹ pẹlu awọn apoti kọọkan. Apẹẹrẹ atẹle ṣe atẹjade awọn akọọlẹ ti eiyan pẹlu ID ti a ti sọ tẹlẹ. Ṣaaju ki o to bẹrẹ, o nilo lati yi ID ti eiyan ti awọn akọọlẹ ti o fẹ gba.
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)
}
Gbigba atokọ ti awọn aworan
Apẹẹrẹ yii jẹ deede si ṣiṣe pipaṣẹ naa 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)
}
}
Fa
Apẹẹrẹ yii jẹ deede si ṣiṣe pipaṣẹ naa 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)
}
Gbigba aworan kan pẹlu ijẹrisi olumulo
Apẹẹrẹ yii jẹ deede si ṣiṣe pipaṣẹ naa docker pull
, pẹlu ìfàṣẹsí.
Awọn data ijẹrisi ti wa ni fifiranṣẹ ni ọrọ mimọ. Awọn iforukọsilẹ docker osise lo HTTPS,
Awọn iforukọsilẹ ikọkọ gbọdọ tun tunto lati ṣe ibaraẹnisọrọ nipa lilo 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)
}
orisun: www.habr.com