如何使用Go语言是操作Docker

Python023

如何使用Go语言是操作Docker,第1张

Docker 提供了一个与 Docker 守护进程交互的 API (称为Docker Engine API),我们可以使用官方提供的 Go 语言的 SDK 进行构建和扩展 Docker 应用程序和解决方案。

转自:https://juejin.cn/post/6944730766052065288

整理:地鼠文档 www.topgoer.cn

通过下面的命令就可以安装 SDK 了:

该部分会介绍如何使用 Golang + Docker API 进行管理本地的 Docker。

第一个例子将展示如何运行容器,相当于 docker run docker.io/library/alpine echo "hello world" :

还可以在后台运行容器,相当于docker run -d bfirsh/reticulate-splines :

列出正在运行的容器,就像使用docker ps 一样:

如果是docker ps -a ,我们可以通过修改 types.ContainerListOptions 中的 All 属性达到这个目的:

通过上面的例子,我们可以获取容器的列表,所以在这个案例中,我们可以去停止所有正在运行的容器。

通过指定容器的 ID,我们可以获取对应 ID 的容器的日志:

获取本地所有的镜像,相当于docker image ls 或 docker images :

拉取指定镜像,相当于docker pull alpine :

除了公开的镜像,我们平时还会用到一些私有镜像,可以是DockerHub 上私有镜像,也可以是自托管的镜像仓库,比如 harbor 。这个时候,我们需要提供对应的凭证才可以拉取镜像。

值得注意的是:在使用Docker API 的 Go SDK 时,凭证是以明文的方式进行传输的,所以如果是自建的镜像仓库,请务必使用 HTTPS !

我们可以将一个已有的容器通过commit 保存成一个镜像:

当然,除了可以管理本地的 Docker , 我们同样也可以通过使用 Golang + Docker API 管理远程的 Docker 。

默认Docker 是通过非网络的 Unix 套接字运行的,只能够进行本地通信( /var/run/docker.sock ),是不能够直接远程连接 Docker 的。

我们需要编辑配置文件 /etc/docker/daemon.json ,并修改以下内容(把 192.168.59.3 改成你自己的 IP 地址),然后重启 Docker :

创建client 的时候需要指定远程 Docker 的地址,这样就可以像管理本地 Docker 一样管理远程的 Docker 了:

现在已经有很多可以管理 Docker 的产品,它们便是这样进行实现的,比如: portainer 。

brew install go

输入 brew info go 或者 go env 即可查看当前安装的golang版本信息

注意:千万不要把GOPATH设置成go的安装路径,可以自己在用户目录下创建一个目录,例如mygo

一般安装好go之后,使用go env查看一下当前环境。此时显示出来的GOROOT就是你使用brew安装go的安装目录,这个路径要记下来。接下来要在bash_profile文件中进行配置。

使用vim ~/.bash_profile

然后在这个文件中进行编辑,下面以我的电脑为例,路径这种要根据不同人的情况而定

GOROOT=/usr/local/Cellar/go/1.10.1/libexec (改成自己的go安装目录 go env命令可查看)

export GOROOT (不用动)

export GOPATH=/Users/jiangqiaowei/mygo (创建一个自己的文件夹 管理go相关内容)

export GOBIN=$GOPATH/bin (不用改)

export PATH=$PATH:$GOBIN:$GOROOT/bin (不用改)

$ go get golang.org/x/mobile/cmd/gomobile (需要墙)

gomobile init

$ go get -d golang.org/x/mobile/example/bind/...

$ cd $GOPATH/src/golang.org/x/mobile/example/bind

$ gomobile bind -target=ios golang.org/x/mobile/example/bind/hello

此命令在ios/路径下生成bind.xcodeprojxcode项目以及 在bind/目录下生成一个 hello.framework

拖入项目即可使用

go语言作为google的一个主推语言,最近很多人都在研究,也花了一点时间对他的安装进行了测试,本人使用Sublime Text 2 + GoSublime + gocode

顾名思义首先是安装Go,这里有很详细的安装说明,http://code.google.com/p/golang-china/wiki/Install 或者http://golang.org/doc/install(golang.org自己去找hosts),官方已经支持Windows版本

下载解压配置环境变量

“环境变量”(我的电脑->高级系统设置->环境变量),在系统变量的标签下,依次新建编辑如下几个键值对:

(1). 新建 变量名:GOBIN 变量值 :c:\go\bin

(2). 新建 变量名:GOARCH 变量值:386

(3). 新建 变量名:GOOS 变量值:windows

(4). 新建 变量名: GOROOT 变量值:c:\go

(5). 编辑 Path 在Path的变量值的最后加上 %GOBIN%

1. 下载 Sublime Text 2,地址如下:http://www.sublimetext.com/

2. 解压以后,双击 sublime_text,就可以使用 Sublime Text 2 了。

破解:

用 WinHex 编辑 sublime_text_backup.exe 文件, 跳到 000CBB70 那一行,将该行的 8A C3 修改为 B0 01 然后保存

破解注册成功

3. 安装 Package Control,在打开 Sublime Text 2以后,按下快捷键 Ctrl + `,打开命令窗行(具体在view——show Console),并回车:

import urllib2,ospf=’Package Control.sublime-package’ipp=sublime.installed_packages_path()os.makedirs(ipp) if not os.path.exists(ipp) else Noneurllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()))open(os.path.join(ipp,pf),’wb’).write(urllib2.urlopen(‘http://sublime.wbond.net/’+pf.replace(‘ ‘,’%20′)).read())print ‘Please restart Sublime Text to finish installation’

4. 重启Sublime Text 2后,就可以发现在 Preferences菜单下,多出一个菜单项 Package Control。

5.现在安装GoSublime插件了,按住Ctrl+Shilft+p会弹出一个对话框输入install回车弹出一个安装包的对话框

同上输入GoSublime选择GoSublime回车

本机已经安装所以没有出现选项,输入Go build选中回车(这个属于可选)

到此GoSublime安装成功

6.下面安装gocode,

首安装 Git-1.7.11-preview20120710。

打开控制台,输入以下内容:

go get github.com/nsf/gocode

go install github.com/nsf/gocode

go get github.com/DisposaBoy/MarGo

go install github.com/DisposaBoy/MarGo

也可以去github下载https://github.com/nsf/gocode.git(要安装google的git版本管理工具)

安装完成后,我们可以在 go/bin 目录下,发现多出了个 gocode 文件。(一定要放在bin目录下)

7. 修改GoSublime配置:在 Preferences菜单下,找到Package Settings,然后找到 GoSublime,再往下找到 Settings – Default。再打开的文件中,添加如下配置,并保存:

"env": {"path":"c:/go/bin" },

好了,到目前为止,开发环境搭建完成。

下面可以自由编程了。呵呵。

按下快捷键 Ctrl + b 界面下方会出现如下界面:

好了,到现在,开发环境就搭建完毕了。

如下是内容我这边没有使用照样可以使用:

sublime Text 2 编译配置设置方法

tools->build system->new build system 新建一个配置文件 设置为

{

“cmd”: ["go", "run", "$file_name"],

“file_regex”: “^[ ]*File \”(…*?)\”, line ([0-9]*)”,

“working_dir”: “$file_path”,

“selector”: “source.go”

}

然后就可以用ctrl+b 编译了

保存