go-to-docker

command module
v0.0.0-...-f4cebfc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 22, 2020 License: Apache-2.0 Imports: 6 Imported by: 0

README

go-to-docker

A Micro-Service working around Docker (http://docs.docker.com/) Remote API (version 1.23+, docker 1.11+) & Registry API (v2)

Feature: based on gRPC and gRPC-Gateway (insecure mode)

Install

On Linux, docker server installed (minimal api version is 1.23), for example

[vagrant@kubedev-172-17-4-59 go-to-docker]$ docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: <unknown>
 Go version:      go1.8.4
 Git commit:      584d391/1.13.1
 Built:           Thu Nov 23 21:40:58 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: <unknown>
 Go version:      go1.8.4
 Git commit:      584d391/1.13.1
 Built:           Thu Nov 23 21:40:58 2017
 OS/Arch:         linux/amd64
 Experimental:    false

Get docker image

$ docker pull docker.io/tangfeixiong/go-to-docker:0.2

Run (note: Docker container name must be unique, that's saying if already install before, destroy it firstly like docker stop go-to-docket then docker rm go-to-docker)

[vagrant@kubedev-172-17-4-59 go-to-docker]$ docker run -d --name=go-to-docker -p 10053:10053 -v /var/run/docker.sock:/var/run/docker.sock:ro --privileged=true docker.io/tangfeixiong/go-to-docker:0.2
74223a63ddd98d71a9213e772a653f712b83dde3363fae4a6eabbc75d2833075

Log console

[vagrant@kubedev-172-17-4-59 go-to-docker]$ docker logs go-to-docker
I0912 21:26:13.970335       1 client.go:93] Start docker client with request timeout=1m59s
Test

To create docker network (bridge)

[vagrant@kubedev-172-17-4-59 go-to-docker]$ ./runtests_curl.sh --addr=172.17.4.59:10053 docker-network-create
{"name":"stackdocker-brj5lp62cw7","network_create":{"check_duplicate":false,"driver":"","scope":"","enable_ipv6":false,"ipam":{"driver":"","options":{},"config":[]},"internal":false,"attachable":false,"ingress":false,"config_only":false,"config_from":{"network":""},"options":{},"labels":{}},"network_create_response":{"id":"cd1526477a81d27a2b3751903dd268cc92c1bad453f495ac974407ba61f0eb04","warning":""},"state_code":0,"state_message":"created"}

Verified via docker

[vagrant@kubedev-172-17-4-59 go-to-docker]$ docker network ls
NETWORK ID          NAME                                  DRIVER              SCOPE
ff440256465f        bridge                                bridge              local
05f9661b589a        host                                  host                local
dce70daba980        none                                  null                local
cd1526477a81        stackdocker-brj5lp62cw7               bridge              local

and

[vagrant@kubedev-172-17-4-59 go-to-docker]$ docker logs go-to-docker
I0912 21:26:13.970335       1 client.go:93] Start docker client with request timeout=1m59s
W0912 21:33:31.249346       1 helper.go:482] Docker network name not specified
W0912 21:33:31.249678       1 helper.go:497] Networking IPAM arguments not specified
I0912 21:33:46.401586       1 network.go:38] docker network cd1526477a81d27a2b3751903dd268cc92c1bad453f495ac974407ba61f0eb04 created
OpanAPI

swagger 2.0 屏幕快照 2018-09-12 下午2.46.33.png

More

For example, process status

[vagrant@kubedev-172-17-4-59 go-to-docker]$ sudo ps -ef | grep go-to-docker
vagrant  26238  3803  0 21:45 pts/0    00:00:00 grep --color=auto go-to-docker

and such as find listening port

[vagrant@kubedev-172-17-4-59 go-to-docker]$ sudo netstat -tpnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      1526/kubelet        
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      3344/kube-proxy     
tcp        0      0 127.0.0.1:10251         0.0.0.0:*               LISTEN      9720/kube-scheduler 
tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      2927/etcd           
tcp        0      0 127.0.0.1:10252         0.0.0.0:*               LISTEN      9774/kube-controlle 
tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN      2927/etcd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      472/sshd            
tcp6       0      0 :::10080                :::*                    LISTEN      1059/docker-proxy-c 
tcp6       0      0 :::10053                :::*                    LISTEN      22531/docker-proxy- 
tcp6       0      0 :::10022                :::*                    LISTEN      1070/docker-proxy-c 
tcp6       0      0 :::30538                :::*                    LISTEN      3344/kube-proxy     
tcp6       0      0 :::10250                :::*                    LISTEN      1526/kubelet        
tcp6       0      0 :::6443                 :::*                    LISTEN      9747/kube-apiserver 
tcp6       0      0 :::31471                :::*                    LISTEN      3344/kube-proxy     
tcp6       0      0 :::10255                :::*                    LISTEN      1526/kubelet        
tcp6       0      0 :::10256                :::*                    LISTEN      3344/kube-proxy     
tcp6       0      0 :::48080                :::*                    LISTEN      1047/docker-proxy-c 
tcp6       0      0 :::22                   :::*                    LISTEN      472/sshd            
tcp6       0      0 :::13306                :::*                    LISTEN      1081/docker-proxy-c 

Development

Make binary

[vagrant@localhost go-to-docker]$ make go-install
go install -v ./
github.com/tangfeixiong/go-to-docker/pkg/ui/data/swagger
github.com/tangfeixiong/go-to-docker/pkg/server
github.com/tangfeixiong/go-to-docker/cmd
github.com/tangfeixiong/go-to-docker

Make dockernized

[vagrant@localhost go-to-docker]$ make
### snip ###
[vagrant@localhost go-to-docker]$ docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --privileged=true \
  -p 10052:10052 \
  -e DOCKER_CONFIG_JSON='{"auths":{"127.0.0.1:5000":{"auth":"<basicauth-base64-encoded>","email":""}}}' \
  -e REGISTRY_CERTS_JSON='{"127.0.0.1:5000":{"ca_base64":"<cacert-base64-encoded>"}}' \
  --name=go-to-docker docker.io/tangfeixiong/go-to-docker:0.1
24be50de5ed082409ba98560cff37f3ba31e1eda82ace02b98ec83ea8cce680e

For DOCKER_CONFIG_JSON environment

[vagrant@localhost go-to-docker]$ cat ~/.docker/config.json | tr -d '\n\t '
{"auths":{"...":{"auth":"...","email":""},...}}}

For REGISTRY_CERTS_JSON environment

[vagrant@localhost go-to-docker]$ echo "{\"127.0.0.1:5000\":{\"ca_base64\":\"$(base64 -w 0 /etc/docker/certs.d/127.0.0.1:5000/ca.crt)\"}}"
Docker API

Examples with docker client, engine-api, go-dockerclient, and native json api

Inspired

https://github.com/grpc-ecosystem/grpc-gateway

https://github.com/philips/grpc-gateway-example

https://github.com/jcbsmpsn/golang-https-example

Deployment

Docker Compose

Download from Github Release Repositories

$ curl -jkSL https://github.com/docker/compose/releases/download/1.15.0/docker-compose-Linux-x86_64 -O
$ chmod +x docker-compose-Linux-x86_64
$ ./docker-compose-Linux-x86_64 --help

Etcd download from Github Release Repositories

$ curl -jkSL https://github.com/coreos/etcd/releases/download/v3.2.4/etcd-v3.2.4-linux-amd64.tar.gz -O
$ tar -C /home/vagrant/go/bin/ -zxf etcd-v3.2.4-linux-amd64.tar.gz --strip-components=1 etcd-v3.2.4-linux-amd64/etcd etcd-v3.2.4-linux-amd64/etcdctl
$ etcd --version
etcd Version: 3.2.4
Git SHA: c31bec0
Go Version: go1.8.3
Go OS/Arch: linux/amd64
$ etcdctl --version
etcdctl version: 3.2.4
API version: 2

Example

[vagrant@localhost go-to-docker]$ sudo mkdir -p /srv/etc/data

[vagrant@localhost go-to-docker]$ hostname -I | awk '{print $2}'
172.17.4.50

[vagrant@localhost go-to-docker]$ sed 's/$NODE1/172.17.4.50/g' docker-compose.yml.sed > docker-compose.yml

[vagrant@localhost go-to-docker]$ docker-compose up -d

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd
pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.
pkg/manipulate
Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/command.go package kubectl Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/kubectl.go package kubectl Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/get.go package kubectl
Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/command.go package kubectl Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/kubectl.go package kubectl Inspired from https://github.com/helm/helm-classic/blob/master/kubectl/get.go package kubectl
examples
registry_client
Inspired by: https://github.com/heroku/docker-registry-client/blob/master/registry/registry.go https://github.com/jcbsmpsn/golang-https-example/blob/master/https_client.go
Inspired by: https://github.com/heroku/docker-registry-client/blob/master/registry/registry.go https://github.com/jcbsmpsn/golang-https-example/blob/master/https_client.go
Inspired by https://github.com/philips/grpc-gateway-example/blob/master/insecure/certs.go
Inspired by https://github.com/philips/grpc-gateway-example/blob/master/insecure/certs.go
cmd
pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.
pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.
engine
Package moby is a generated protocol buffer package.
Package moby is a generated protocol buffer package.
moby
Package moby is a generated protocol buffer package.
Package moby is a generated protocol buffer package.
moby/blkiodev
Package blkiodev is a generated protocol buffer package.
Package blkiodev is a generated protocol buffer package.
moby/container
Package container is a generated protocol buffer package.
Package container is a generated protocol buffer package.
moby/filters
Package filters is a generated protocol buffer package.
Package filters is a generated protocol buffer package.
moby/mount
Package mount is a generated protocol buffer package.
Package mount is a generated protocol buffer package.
moby/nat
Package nat is a generated protocol buffer package.
Package nat is a generated protocol buffer package.
moby/network
Package network is a generated protocol buffer package.
Package network is a generated protocol buffer package.
moby/units
Package units is a generated protocol buffer package.
Package units is a generated protocol buffer package.
pkg
api
kubeletcopycat/apis/cri/runtime/v1alpha2
Package v1alpha2 is a generated protocol buffer package.
Package v1alpha2 is a generated protocol buffer package.
kubeletcopycat/dockershim/libdocker
Inspired by - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/libdocker/client.go Inspired by: - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubeletdockershim/libdocker/helpers.go Inspired by - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/libdocker/instrumented_client.go
Inspired by - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/libdocker/client.go Inspired by: - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubeletdockershim/libdocker/helpers.go Inspired by - https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/libdocker/instrumented_client.go
kubeletcopycat/leaky
Package leaky holds bits of kubelet that should be internal but have leaked out through bad abstractions.
Package leaky holds bits of kubelet that should be internal but have leaked out through bad abstractions.
scm/git
Refer to: - https://github.com/src-d/go-git - https://github.com/src-d/go-git/blob/master/_examples/clone/main.go"
Refer to: - https://github.com/src-d/go-git - https://github.com/src-d/go-git/blob/master/_examples/clone/main.go"
scm/git/go-github
Refer to: - https://github.com/google/go-github
Refer to: - https://github.com/google/go-github
ui
util
https://gist.github.com/svett/b7f56afc966a6b6ac2fc http://blog.ralch.com/tutorial/golang-ssh-connection/ package main
https://gist.github.com/svett/b7f56afc966a6b6ac2fc http://blog.ralch.com/tutorial/golang-ssh-connection/ package main
util/homedir
Inspired by: - https://github.com/kubernetes/client-go/blob/master/util/homedir/homedir.go Alternative: - https://github.com/mitchellh/go-homedir
Inspired by: - https://github.com/kubernetes/client-go/blob/master/util/homedir/homedir.go Alternative: - https://github.com/mitchellh/go-homedir
cmd
pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL