เชเซเชฏเชพเชฐเซ เชคเชฎเซ เชธเชฐเซเชตเชฐ เชชเชฐ เชเชจเซเชเซเชจเชฐเชจเซ เชเชชเชฎเซเชณเซ เช
เชชเชกเซเช/เชฐเชจ เชเชฐเชตเชพ เชฎเชพเชเซ เชกเซเชเชฐ เชนเชฌเชฎเชพเชเชฅเซ เช
เชฅเชตเชพ เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเชเชฅเซ เชนเซเชเซเชธ เชชเชเชกเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชชเซเชคเชพเชจเซ เชฌเชพเชเช เชฒเชเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชคเชฎเชจเซ เชกเซเชเชฐ เชเซเชฒเซ เชเชชเชฏเซเชเซ เชฒเชพเชเซ เชถเชเซ เชเซ, เชเซ เชคเชฎเชพเชฐเซ เชธเชฟเชธเซเชเชฎ เชชเชฐ เชกเซเชเชฐ เชกเชฟเชฎเชจเชจเซ เชธเชเชเชพเชฒเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ.
เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเซ เชตเชฐเซเชเชจเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ เชเซ 1.9.4 เชเชฐเชคเชพ เชเชเซเช เชจเชนเซเช เชนเซเชฏ
เชเซ เชคเชฎเซ เชนเชเซ เชชเชฃ เชฎเซเชกเซเชฏเซเชฒเซ เชชเชฐ เชธเซเชตเชฟเช เชเชฐเซเชฏเซเช เชจเชฅเซ, เชคเซ เชจเซเชเซเชจเชพ เชเชฆเซเชถ เชธเชพเชฅเซ Cli เชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ:
go get github.com/docker/docker/client
เชเชจเซเชเซเชจเชฐ เชเชฒเชพเชตเชตเซเช
เชจเซเชเซเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชฌเชคเชพเชตเซ เชเซ เชเซ เชกเซเชเชฐ 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 เชฌเชฆเชฒเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชจเชพ เชฒเซเช เชคเชฎเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ.
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