Lokacin da kuka yanke shawarar rubuta keken ku don kama ƙugiya daga tashar docker ko daga wurin yin rajista don sabunta / gudanar da kwantena ta atomatik akan uwar garken, zaku iya samun Docker Cli yana da amfani, wanda zai taimaka sarrafa Docker daemon akan tsarin ku.
Don aiki za ku buƙaci Go version ba ƙasa da 1.9.4
Idan har yanzu baku canza zuwa kayayyaki ba, shigar da Cli tare da umarni mai zuwa:
go get github.com/docker/docker/client
Gudun akwati
Misali mai zuwa yana nuna yadda ake gudanar da akwati ta amfani da Docker API. A kan layin umarni za ku yi amfani da umarnin docker run
, amma za mu iya sauƙin jimre wa wannan aikin a hidimarmu.
Wannan misalin yayi daidai da gudanar da umarni 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)
}
Samun jerin kwantena masu gudana
Wannan misalin yayi daidai da gudanar da umarni 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)
}
}
Tsayawa duk kwantena masu gudana
Da zarar kun koyi yadda ake ƙirƙira da sarrafa kwantena, lokaci yayi da za ku koyi yadda ake sarrafa su. Misali mai zuwa zai dakatar da duk kwantena masu gudana.
Kar a gudanar da wannan lambar akan sabar samarwa!
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")
}
}
Nuna rajistan ayyukan ganga guda ɗaya
Kuna iya aiki tare da kwantena ɗaya. Misali mai zuwa yana nuna rajistan ayyukan ganga tare da ƙayyadadden mai ganowa. Kafin farawa, kuna buƙatar canza ID na akwati wanda kuke son karɓar rajistan ayyukansa.
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)
}
Samun jerin hotuna
Wannan misalin yayi daidai da gudanar da umarni 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)
}
}
ja
Wannan misalin yayi daidai da gudanar da umarni 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)
}
Zazzage hoto tare da amincin mai amfani
Wannan misalin yayi daidai da gudanar da umarni docker pull
, tare da tabbaci.
Ana aika bayanan tabbatarwa a bayyanannen rubutu. Rijistar docker na hukuma yana amfani da HTTPS,
Hakanan dole ne a saita masu rajista masu zaman kansu don canja wurin bayanai ta amfani da 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)
}
source: www.habr.com