แ แแแแกแแช แแแแแฌแงแแแขแ แแแฌแแ แแ แแฅแแแแ แแแแแกแแแแแ แแแแแ แแก แแแ แแแแ แแ แ แแแกแขแ แแแแ, แ แแ แแแขแแแแขแฃแ แแ แแแแแฎแแแแก/แแแแฌแงแแก แแแแขแแแแแ แแแ แกแแ แแแ แแ, Docker Cli แแแแแแแแแแแแ แแฅแแแแก แกแแกแขแแแแจแ Docker แแแแแแแก แแแ แแแแจแ.
แกแแแฃแจแแแ แแญแแ แแแแแ Go แแแ แกแแ แแแแแแฃแ 1.9.4
แแฃ แฏแแ แแแแแ แแ แแแแแกแฃแแฎแแ แ แแแแฃแแแแแ, แแแแแแกแขแแแแ แแ Cli แจแแแแแแ แแ แซแแแแแแ:
go get github.com/docker/docker/client
แแแแขแแแแแ แแก แแแจแแแแ
แจแแแแแแ แแแแแแแแ แแแแฉแแแแแแก, แแฃ แ แแแแ แฃแแแ แแแฃแจแแแ แแแแขแแแแแ แ Docker API-แแก แแแแแงแแแแแแ. แแ แซแแแแแแก แกแขแ แแฅแแแแ, แแฅแแแ แแงแแแแแ แแ แซแแแแแแก docker run
, แแแแ แแ แฉแแแ แจแแแแแซแแแ แแแ แขแแแแ แแแแฃแแแแแแแแ แแ แแแแชแแแแก แฉแแแแก แกแแ แแแกแจแ.
แแก แแแแแแแแ แฃแแ แแก แแ แซแแแแแแก แแแจแแแแแก 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)
}
แแแจแแแแฃแแ แแแแขแแแแแ แแแแก แกแแแก แแแฆแแแ
แแก แแแแแแแแ แฃแแ แแก แแ แซแแแแแแก แแแจแแแแแก 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)
}
}
แแแแฉแแ แแ แงแแแแ แแแจแแแแฃแแ แแแแขแแแแแ แ
แแฎแแ, แ แแชแ แแกแฌแแแแแ แแแแขแแแแแ แแแแก แจแแฅแแแ แแ แแแจแแแแ, แแ แแ แแกแฌแแแแแ แแแแ แแแ แแแ. แจแแแแแแ แแแแแแแแ แจแแแฉแแ แแแก แงแแแแ แแแจแแแแฃแ แแแแขแแแแแ แก.
แแ แแแฃแจแแแ แแก แแแแ แฌแแ แแแแแแก แกแแ แแแ แแ!
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")
}
}
แแ แแ แแแแขแแแแแ แแก แแแแแแแแแแ แแฃแ แแแแ
แจแแแแซแแแแ แแแฃแจแแแ แแแแแแแแฃแแแฃแ แ แแแแขแแแแแ แแแแ. แจแแแแแแ แแแแแแแแ แแแแแกแชแแแก แแแแขแแแแแ แแก แแฃแ แแแแแแก แแแแแแแแฃแแ ID-แแ. แแแฌแงแแแแแแ, แแฅแแแ แฃแแแ แจแแชแแแแแ แแแแขแแแแแ แแก ID, แ แแแแแก แแฃแ แแแแแแแก แแแฆแแแ แแกแฃแ แ.
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)
}
แกแฃแ แแแแแแก แกแแแก แแแฆแแแ
แแก แแแแแแแแ แฃแแ แแก แแ แซแแแแแแก แแแจแแแแแก 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)
}
}
แแแแแแ
แแก แแแแแแแแ แฃแแ แแก แแ แซแแแแแแก แแแจแแแแแก 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)
}
แกแฃแ แแแแก แฉแแแแขแแแ แแแ แแแแฎแแแ แแแแแก แแแแแแขแแคแแแแชแแแ
แแก แแแแแแแแ แฃแแ แแก แแ แซแแแแแแก แแแจแแแแแก docker pull
, แแแแแแขแแคแแแแชแแแ.
แแแแแแขแแคแแแแชแแแก แแแแแชแแแแแ แแแแแแแแแ แแแแคแแ แขแแฅแกแขแแ. แแคแแชแแแแฃแ แ แแแแแ แแก แ แแแกแขแ แแแ แแงแแแแแแ HTTPS,
แแแ แซแ แ แแแกแขแ แแแ แแกแแแ แฃแแแ แแงแแก แแแแคแแแฃแ แแ แแแฃแแ 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)
}
แฌแงแแ แ: www.habr.com