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.
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