docker hub ááŸáá»áááºáá»á¬ážáááºážáááºá¡ááœáẠááá¯á·ááá¯áẠáá¬áá¬áá±á«áºááœáẠááœááºááááºáá¬áá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠupdate/run ááŒá¯áá¯ááºáááºá¡ááœáẠregistry á០ááá·áºááá¯ááºááá¯ááºá
ááºáá®ážááᯠáá±ážáá¬ážááẠáá¯á¶ážááŒááºáá±á¬á¡áá«á ááá·áºá
áá
áºáá±á«áºááŸá Docker daemon ááᯠá
á®áá¶ááá·áºááœá²áá¬ááœáẠá¡áá±á¬ááºá¡áá°ááŒá
áºá
á±ááá·áº Docker Cli ááẠá¡áá¯á¶ážáááºáááºááᯠááœá±á·ááŸáááá¯ááºáááºá
á¡áá¯ááºáá¯ááºááẠáááºááẠGo áá¬ážááŸááºáž 1.9.4 áááºááááá·áºáá«á
áá±á¬áºáá»á°ážáá»á¬ážááá¯á· áááŒá±á¬ááºážááá±ážáá«áá á¡á±á¬ááºáá« command ááŒáá·áº Cli ááᯠááá·áºááœááºážáá«á
go get github.com/docker/docker/client
ááœááºááááºáá¬ááᯠááŒá±ážáááºá
á¡á±á¬ááºáá±á¬áºááŒáá« á¥ááá¬ááẠDocker API ááᯠá¡áá¯á¶ážááŒá¯á ááœááºááááºáá¬áá
áºáá¯á¡á¬áž áááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááŒááá¬ážáááºá command line ááœááºááẠcommand ááá¯á¡áá¯á¶ážááŒá¯áááºá docker run
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá±á¬ááºááŸá¯ááœáẠá€áá¬áááºááᯠá¡ááœááºááá°ááá¯ááºááœááºááŒá±ááŸááºážááá¯ááºáá«áááºá
á€á¥ááá¬ááẠcommand ááᯠ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)
}
áá¯ááºáá±á¬ááºáá±ááá·áº ááœááºááááºáá¬á á¬áááºážááᯠááá°ááŒááºážá
á€á¥ááá¬ááẠcommand ááᯠrun ááŒááºážááŸáá·áºáá®áá»áŸáááºá 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)
}
áá¯á¶áá»á¬ážá á¬áááºážááá°ááŒááºážá
á€á¥ááá¬ááẠcommand ááᯠrun ááŒááºážááŸáá·áºáá®áá»áŸáááºá 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)
}
}
ááœá²áá«
á€á¥ááá¬ááẠcommand ááᯠrun ááŒááºážááŸáá·áºáá®áá»áŸáááºá 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)
}
á¡áá¯á¶ážááŒá¯áá° á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒáá·áº áá¯á¶áá áºáá¯á¶ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒááºážá
á€á¥ááá¬ááẠcommand ááᯠrun ááŒááºážááŸáá·áºáá®áá»áŸáááºá docker pull
á
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒáá·áºá
á á áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒáá±áá¬ááᯠááŸááºážáááºážáá±á¬á á¬áá¬ážááŒáá·áº áá±ážááá¯á·áááºá ááá¬ážááẠdocker ááŸááºáá¯á¶áááºááŒááºážááœáẠ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)
}
source: www.habr.com