Xa uthatha isigqibo sokubhala eyakho ibhayisekile yokubamba amagwegwe kwi-docker hub okanye kwirejistri ukuhlaziya ngokuzenzekelayo / ukuqhuba izikhongozeli kumncedisi, unokufumana i-Docker Cli iluncedo, eya kunceda ukulawula i-daemon ye-Docker kwinkqubo yakho.
Ukuze usebenze uya kufuna inguqulelo yeGo engekho ngaphantsi kwe-1.9.4
Ukuba awukatshintsheli kwiimodyuli, faka iCli ngalo myalelo ulandelayo:
go get github.com/docker/docker/client
Ukuqhuba isikhongozeli
Lo mzekelo ulandelayo ubonisa indlela yokuqhuba isikhongozeli usebenzisa iDocker API. Kumgca womyalelo uya kusebenzisa umyalelo docker run
, kodwa sinokuhlangabezana ngokulula nalo msebenzi kwinkonzo yethu.
Lo mzekelo ulingana nokusebenza komyalelo 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)
}
Ukufumana uluhlu lwezikhongozeli ezibalekayo
Lo mzekelo ulingana nokusebenza komyalelo 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)
}
}
Ukumisa zonke izikhongozeli ezibalekayo
Nje ukuba ufunde ukwenza kunye nokuqhuba izikhongozeli, lixesha lokuba ufunde ukuzilawula. Lo mzekelo ulandelayo uya kumisa zonke izikhongozeli ezibalekayo.
Musa ukuqhuba le khowudi kwiseva yemveliso!
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")
}
}
Ukubonisa iilog zesikhongozeli esinye
Unokusebenza kunye nezikhongozeli ezizimeleyo. Lo mzekelo ulandelayo ubonisa iilog zesikhongozeli kunye nesazisi esikhankanyiweyo. Ngaphambi kokuba uqalise, kufuneka utshintshe i-ID yesikhongozeli ofuna ukusifumana.
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)
}
Ukufumana uluhlu lwemifanekiso
Lo mzekelo ulingana nokusebenza komyalelo 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)
}
}
Tsala
Lo mzekelo ulingana nokusebenza komyalelo 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)
}
Ikhuphela umfanekiso ngoqinisekiso lomsebenzisi
Lo mzekelo ulingana nokusebenza komyalelo docker pull
, ngobungqina.
Idatha yokuqinisekisa ithunyelwa ngokubhaliweyo okucacileyo. Irejistri esemthethweni yedocker isebenzisa iHTTPS,
iirejista zabucala kufuneka ziqwalaselwe ukudlulisa idatha kusetyenziswa iHTTPS.
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)
}
umthombo: www.habr.com