ಡಾಕರ್ ಹಬ್ನಿಂದ ಅಥವಾ ನೋಂದಾವಣೆಯಿಂದ ಕೊಕ್ಕೆಗಳನ್ನು ಹಿಡಿಯಲು ನಿಮ್ಮ ಸ್ವಂತ ಬೈಕು ಬರೆಯಲು ನೀವು ನಿರ್ಧರಿಸಿದಾಗ, ಸರ್ವರ್ನಲ್ಲಿ ಕಂಟೇನರ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸಲು/ರನ್ ಮಾಡಲು, ನಿಮ್ಮ ಸಿಸ್ಟಂನಲ್ಲಿ ಡಾಕರ್ ಡೀಮನ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಸಹಾಯ ಮಾಡುವ ಡಾಕರ್ ಕ್ಲೈ ನಿಮಗೆ ಉಪಯುಕ್ತವಾಗಬಹುದು.
ಕೆಲಸ ಮಾಡಲು ನಿಮಗೆ 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