64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
|
package docker
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"io"
|
||
|
|
||
|
"github.com/docker/docker/api/types"
|
||
|
"github.com/docker/docker/api/types/container"
|
||
|
"github.com/docker/docker/api/types/network"
|
||
|
"github.com/docker/docker/client"
|
||
|
oci "github.com/opencontainers/image-spec/specs-go/v1"
|
||
|
)
|
||
|
|
||
|
func Ps() ([]types.Container, error) {
|
||
|
cli, err := client.NewClientWithOpts(client.FromEnv)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{})
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return containers, nil
|
||
|
}
|
||
|
|
||
|
func RunHello() (io.ReadCloser, error) {
|
||
|
cli, err := client.NewClientWithOpts(client.FromEnv)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
ctnr, err := cli.ContainerCreate(
|
||
|
context.Background(),
|
||
|
&container.Config{
|
||
|
AttachStdout: true,
|
||
|
AttachStderr: true,
|
||
|
Image: "hello-world",
|
||
|
},
|
||
|
&container.HostConfig{},
|
||
|
&network.NetworkingConfig{},
|
||
|
&oci.Platform{
|
||
|
Architecture: "amd64",
|
||
|
OS: "linux",
|
||
|
},
|
||
|
"",
|
||
|
)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
err = cli.ContainerStart(context.Background(), ctnr.ID, types.ContainerStartOptions{})
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return cli.ContainerLogs(context.Background(), ctnr.ID, types.ContainerLogsOptions{
|
||
|
ShowStdout: true,
|
||
|
ShowStderr: true,
|
||
|
Follow: true,
|
||
|
})
|
||
|
}
|