جڏهن توهان فيصلو ڪيو ته توهان جي پنهنجي سائيڪل کي پڪڙڻ لاءِ ڊڪر هب يا رجسٽري کان پاڻمرادو تازه ڪاري / سرور تي ڪنٽينرز هلائڻ لاءِ، توهان کي ڳولي سگهو ٿا ڊڪر ڪلي مفيد، جيڪو توهان جي سسٽم تي ڊڪر ڊيمن کي منظم ڪرڻ ۾ مدد ڪندو.
ڪم ڪرڻ لاءِ توھان کي ضرورت پوندي Go ورجن 1.9.4 کان گھٽ نه آھي
جيڪڏهن توهان اڃا تائين ماڊلز کي تبديل نه ڪيو آهي، ڪلائي کي هيٺ ڏنل حڪم سان انسٽال ڪريو:
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