เดธเตเตผเดตเดฑเดฟเดฒเต เดเดฃเตเดเตเดฏเตโเดจเดฑเตเดเตพ เดธเตเดตเดฏเดฎเตเดต เด
เดชเตโเดกเตเดฑเตเดฑเต/เดฑเตบ เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดกเตเดเตเดเตผ เดนเดฌเตเดฌเดฟเตฝ เดจเดฟเดจเตเดจเต เดฐเดเดฟเดธเตเดเตเดฐเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตเดณเตเดคเตเดคเตเดเตพ เดชเดฟเดเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเดณเตเดเต เดธเตเดตเดจเตเดคเด เดฌเตเดเตเดเต เดเดดเตเดคเดพเตป เดจเดฟเดเตเดเตพ เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดกเตเดเตเดเตผ เดเตเดฒเดฟ เดเดชเดฏเตเดเดชเตเดฐเดฆเดฎเดพเดฃเตเดจเตเดจเต เดจเดฟเดเตเดเตพ เดเดฃเตเดเตเดคเตเดคเดฟเดฏเตเดเตเดเดพเด, เดเดคเต เดจเดฟเดเตเดเดณเตเดเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดฒเต เดกเตเดเตเดเตผ เดกเตเดฎเตบ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดเตเดเดพเตป เดธเดนเดพเดฏเดฟเดเตเดเตเด.
เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดจเดฟเดเตเดเตพเดเตเดเต 1.9.4-เตฝ เดเตเดฑเดฏเดพเดคเตเดค Go เดชเดคเดฟเดชเตเดชเต เดเดตเดถเตเดฏเดฎเดพเดฃเต
เดจเดฟเดเตเดเตพ เดเดชเตเดชเตเดดเตเด เดฎเตเดกเตเดฏเตเดณเตเดเดณเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเดฟเดฏเดฟเดเตเดเดฟเดฒเตเดฒเตเดเตเดเดฟเตฝ, เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเดฎเดพเตปเดกเต เดเดชเดฏเตเดเดฟเดเตเดเต 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")
}
}
เดเดฐเตเดฑเตเดฑ เดเดฃเตเดเตเดฏเตโเดจเดฑเดฟเดจเดพเดฏเดฟ เดฒเตเดเตเดเตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต
เดจเดฟเดเตเดเตพเดเตเดเต เดตเตเดฏเดเตเดคเดฟเดเดค เดเดฃเตเดเตเดฏเตเดจเดฑเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเด. เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเดฆเดพเดนเดฐเดฃเด เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดเดกเตปเตเดฑเดฟเดซเดฏเตผ เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฃเตเดเตเดฏเตเดจเตผ เดฒเตเดเตเดเตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต. เดเดฐเดเดญเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดจเดฟเดเตเดเตพเดเตเดเต เดฒเดญเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจ เดฒเตเดเตเดเดณเตเดเต เดเดฃเตเดเตเดฏเตโเดจเดฑเดฟเตปเตเดฑเต เดเดกเดฟ เดฎเดพเดฑเตเดฑเตเดฃเตเดเดคเตเดฃเตเดเต.
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