A e filifili e tusi lau lava uila mo le puʻeina o matau mai le docker hub pe mai le resitala e otometi ona faʻafouina / taʻavale pusa i luga o le 'auʻaunaga, e mafai ona e mauaina le Docker Cli aoga, lea o le a fesoasoani e pulea le Docker daemon i lau masini.
Ina ia galue e te manaʻomia le Go version e le itiiti ifo i le 1.9.4
Afai e te leʻi suia i modules, faʻapipiʻi Cli ma le faʻatonuga lea:
go get github.com/docker/docker/client
Ta'avale se koneteina
O le faʻataʻitaʻiga lea e faʻaalia ai le faʻaogaina o se atigipusa e faʻaaoga ai le Docker API. I luga o le laina faʻatonu e te faʻaaogaina le poloaiga docker run
, ae e faigofie ona tatou taulimaina lenei galuega i la tatou auaunaga.
O lenei faʻataʻitaʻiga e tutusa ma le faʻatinoina o le poloaiga 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)
}
Mauaina o se lisi o koneteina tamo'e
O lenei faʻataʻitaʻiga e tutusa ma le faʻatinoina o le poloaiga 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)
}
}
Taofi uma koneteina tamo'e
O le taimi lava e te aʻoaʻoina ai pe faʻafefea ona fai ma taʻavale pusa, ua oʻo i le taimi e aʻoaʻo ai pe faʻafefea ona pulea. O le fa'ata'ita'iga o lo'o mulimuli mai o le a taofia uma ai koneteina ta'avale.
Aua e te faʻaogaina lenei code i luga o se 'auʻaunaga gaosiga!
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")
}
}
Fa'aali ogalaau mo se koneteina e tasi
E mafai ona e galue i pusa ta'itasi. O le fa'ata'ita'iga o lo'o i lalo o lo'o fa'aalia ai ogalaau o koneteina ma le fa'ailoga fa'apitoa. Aʻo leʻi amataina, e tatau ona e suia le ID o le koneteina ona ogalaau e te manaʻo e maua.
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)
}
Maua se lisi o ata
O lenei faʻataʻitaʻiga e tutusa ma le faʻatinoina o le poloaiga 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)
}
}
toso
O lenei faʻataʻitaʻiga e tutusa ma le faʻatinoina o le poloaiga 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)
}
La'uina o se ata ma le fa'amaoniga a le tagata fa'aoga
O lenei faʻataʻitaʻiga e tutusa ma le faʻatinoina o le poloaiga docker pull
, ma le fa'amaoni.
O fa'amaumauga fa'amaonia e lafo i tusitusiga manino. E faʻaaoga e le ofisa faʻamaufaʻailoga aloaia HTTPS,
resitara tumaoti e tatau foi ona configured e fesiitai faamatalaga faaaogaina 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)
}
puna: www.habr.com