github:https://github.com/fsouza/go-dockerclient
可以看出这个库提供了访问docker api的方法,还能够支持swarm,下边是一个简单的使用它的例子!
package main
import (
"fmt"
"bytes"
"strings"
"regexp"
docker "github.com/fsouza/go-dockerclient"
)
var container_name string
func main() {
var endpoint string = "unix:///var/run/docker.sock"
var client *docker.Client
var err error
client, err = docker.NewClient(endpoint)
if err != nil {
panic(err)
}
listImages(client)
listContainers(client)
// var container_name string
getContainerLogs(client)
}
func listImages(client * docker.Client) {
opts :=docker.ListImagesOptions{All: false}
images, err := client.ListImages(opts)
if err != nil {
panic(err)
}
for _, image := range images {
fmt.Println("Images id :", image.ID)
fmt.Println("Images RepoTags: ", image.RepoTags)
}
/*
func listServices(client * docker.Client) {
opts :=docker.ListServicesOptions{}
services , err :=client.ListServices(opts)
if err != nil {
panic(err)
}
for _, service := range services {
fmt.Println("Service ID :", service.ID)
fmt.Println("Service Name :", service.Spec.Name)
fmt.Println("Service Re :", *(service.Spec.Mode.Replicated.Replicas))
}
}
*/
func listContainers(client * docker.Client) {
opts := docker.ListContainersOptions{}
containers, err := client.ListContainers(opts)
if err != nil {
panic(err) }
for _, container := range containers {
fmt.Println("Container ID : ", container.ID)
fmt.Println("Container Names: ", container.Names)
}
container_name = containers[0].Names[0]
fmt.Println("container_name :", container_name)
}
func getContainerLogs(client * docker.Client) {
var buf bytes.Buffer
opts :=docker.LogsOptions {
Container: container_name,
OutputStream: &buf,
ErrorStream: &buf,
Follow: false,
Stdout: true,
Stderr: true,
Tail: "10",
}
err :=client.Logs(opts)
if err != nil {
panic(err)
}
lines :=strings.Split(buf.String(), "\n")
for _, line := range lines {
if matched, _ := regexp.MatchString(`: ERROR :`, line); matched {
fmt.Println(line)
}
}
fmt.Println("get logs!")
}