https://github.com/grid-x/docker
lightweight docker client without external dependencies
https://github.com/grid-x/docker
client-lib docker golang
Last synced: 26 days ago
JSON representation
lightweight docker client without external dependencies
- Host: GitHub
- URL: https://github.com/grid-x/docker
- Owner: grid-x
- License: mit
- Created: 2020-02-17T12:36:43.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-02-17T12:37:04.000Z (almost 6 years ago)
- Last Synced: 2024-06-20T12:41:06.390Z (over 1 year ago)
- Topics: client-lib, docker, golang
- Language: Go
- Size: 8.79 KB
- Stars: 9
- Watchers: 21
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# docker
docker is a lightweight docker libary that uses only the golang standard libary.
This library can be used for basic operations like start, stop, create and delete containers.
Example: create, start, stop and delete a container
```golang
package main
import (
"log"
"time"
"github.com/grid-x/docker"
)
func main() {
dc := docker.NewClient("/var/run/docker.sock")
const container = "gridx-docker-test"
log.Printf("create container %s", container)
exposedPorts := []string{"80/tcp"}
cID, err := dc.CreateContainer(container, "nginxdemos/hello:plain-text", nil, exposedPorts, nil)
if err != nil {
log.Println(err)
}
defer func() {
log.Printf("delete container %s", container)
if err := dc.DeleteContainer(cID); err != nil {
log.Println(err)
}
}()
log.Printf("start container %s", container)
if err := dc.StartContainer(cID); err != nil {
log.Println(err)
}
defer func() {
log.Printf("stop container %s", container)
if err := dc.StopContainer(cID); err != nil {
log.Println(err)
}
}()
// simulating a running program. During this time we can check if
// everything was started by entering docker network ls and
// docker container ps.
time.Sleep(time.Second * 60)
}
```
Example: Create a container from a container and connect both containers via a docker network
```golang
package main
import (
"fmt"
"log"
"os"
"time"
"github.com/grid-x/docker"
)
func main() {
dc := docker.NewClient("/var/run/docker.sock")
// get containerID e.g.:
// docker run --rm -it ubuntu:latest
// root@ef3e8b0e9c4c:/# echo $HOSTNAME
// ef3e8b0e9c4c
myID := os.Getenv("HOSTNAME")
log.Println("myID", myID)
var i int
network := fmt.Sprintf("test_net_%d", i)
log.Printf("create network %s", network)
nwID, err := dc.CreateNetwork(network)
if err != nil {
log.Fatal(err)
}
log.Println("networkID", nwID)
defer dc.DeleteNetwork(nwID)
container := fmt.Sprintf("test_%d", i)
log.Printf("create container %s", container)
exposedPorts := []string{"80/tcp"}
cID, err := dc.CreateContainer(container, "nginxdemos/hello:plain-text", nil, exposedPorts, nil)
if err != nil {
log.Println(err)
}
defer dc.DeleteContainer(cID)
if err := dc.ConnectNetwork(myID, nwID, nil); err != nil {
log.Println(err)
}
defer dc.DisconnectNetwork(myID, nwID)
if err := dc.ConnectNetwork(cID, nwID, nil); err != nil {
log.Println(err)
}
defer dc.DisconnectNetwork(cID, nwID)
if err := dc.StartContainer(cID); err != nil {
log.Println(err)
}
defer dc.StopContainer(cID)
// simulating a running program. During this time we can check if
// everything was started by entering docker network ls and
// docker container ps.
time.Sleep(time.Second * 60)
}
```