Markaad go'aansato inaad qorto baaskiilkaaga si aad qabsatooyinka ka soo qaadato xuddunta docker ama diiwaanka si aad si toos ah u cusbooneysiiso / u socodsiiso weelasha server-ka, waxaad u heli kartaa Docker Cli mid waxtar leh, kaas oo kaa caawin doona maareynta Docker daemon ee nidaamkaaga.

Si aad u shaqeyso waxaad u baahan doontaa nooca Go oo aan ka yarayn 1.9.4
Haddii aadan weli u wareegin qaybaha, ku rakib Cli oo wata amarka soo socda:
go get github.com/docker/docker/clientKu ordaya weel
Tusaalaha soo socdaa wuxuu tusinayaa sida loo maamulo weelka iyadoo la isticmaalayo Docker API. Khadka taliska waxaad isticmaali lahayd amarka docker run, laakiin si fudud ayaan ula qabsan karnaa hawshan adeeggayaga.
Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}Helitaanka liiska weelasha socda
Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}
}
Joojinta dhammaan weelasha socda
Marka aad barato sida loo sameeyo oo loo maamulo weelasha, waa waqtigii aad baran lahayd sida loo maareeyo. Tusaalaha soo socda ayaa joojin doona dhammaan weelasha socda.
Ha ku shaqeyn koodhkan wax soo saarka. server!
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")
}
}Muujinaya diiwaanka hal weel
Waxaad ku shaqayn kartaa weel gaar ah. Tusaalahan soo socdaa waxa uu muujinayaa diiwaannada weelka oo leh aqoonsi cayiman. Kahor intaadan bilaabin, waxaad u baahan tahay inaad beddesho aqoonsiga weelka aad rabto inaad hesho diiwaankiisa.
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)
}Helitaanka liiska sawirada
Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}
}
jiid
Tusaalahani wuxuu u dhigmaa socodsiinta amarka 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)
}
Soo dejinta sawir leh aqoonsiga isticmaalaha
Tusaalahani wuxuu u dhigmaa socodsiinta amarka docker pull, oo leh aqoonsi.
Xogta xaqiijinta waxa lagu soo diraa qoraal cad. Diiwaanka dockerka rasmiga ah wuxuu isticmaalaa HTTPS,
diiwaanka gaarka ah waa in sidoo kale loo habeeyaa si ay u gudbiyaan xogta iyadoo la isticmaalayo 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
