如何使用Go语言是操作Docker

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Go语言是操作Docker相关的知识,希望对你有一定的参考价值。

参考技术A 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 。

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

-- 作者 谢恩铭 转载请注明出处

内容简介


  1. Go语言无悬念加冕

  2. Go语言为什么这么火

  3. 打印Go语言吉祥物地鼠

  4. 历年年度编程语言

  5. Go语言学习资源

  6. Docker学习资源

  7. 总结


1.Go语言无悬念加冕


TIOBE的官网:

TIOBE开发语言排行榜每月更新一次,依据的指数是基于世界范围内的资深软件工程师和第三方供应商提供,其结果作为当前业内程序开发语言的流行使用程度的有效指标。
该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的。
观察认为,该指数反应的虽并非当前最流行或应用最广的语言,但对世界范围内开发语言的走势仍具有重要参考意义。


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

TIOBE 2017年1月编程语言排行榜前20名


2.Go语言为什么这么火


Go语言的大热和Docker(用Go语言写成)容器技术大有关系。


其实Go语言并不是很新,从2007年末由Robert Griesemer,Rob Pike,Ken Thompson主持开发,后来加入了Ian Lance Taylor,Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 稳定版本1.0。


上面这些人中,有大名鼎鼎的Ken Thompson(肯.汤普森),他和Dennis Ritchie(丹尼斯.里奇)在1971年共同发明了C语言。1973年Ken Thompson和Dennis Ritchie用C语言重写了UNIX操作系统。2006年,汤普逊进入Google公司工作,与上面这些人共同设计了Go语言(这种属于大牛中的大牛,bug般的存在... 实难望其项背诶)。


因此,Go有C语言的一些特性也不足为奇了。此外,Go语言也有面向对象的特性,有堪比python的开发速度,堪比JAVA的执行速度,能够直接编译生成机器码方便了部署,以及天生的多核并发支持,等等。


除了开发人员名声在外,又有Google加持之外,Go语言的吉祥物也非常之萌!它是一只地鼠,英语是Gopher(囊地鼠,产自北美的一种地鼠)。在自然界中是这样的:


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

囊地鼠Gopher


这只吉祥物在网上被各种称为“呆萌”、“可爱”、“蠢萌蠢萌的”,“贱贱的”,而且各种公仔和抱枕也是有的。


参看知乎的这个帖子:

据说这只地鼠的形象出自Rob Pike的妻子Renée French之手,源于她若干年前为一款WFMU的T-shirt设计的形象。


大家感受一下:


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源


不知道大家怎么看,我觉得老外发明编程语言或软件时总会挑一些很呆萌的形象,比如Android的小机器人,PHP的大象,Linux的企鹅,Docker的鲸鱼等等,这些吉祥物也让人们更加容易记住这门编程语言。


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

Android的小机器人


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

Linux的企鹅,Docker的鲸鱼,Go的地鼠


3.打印Go语言吉祥物地鼠


网上有一个很厉害的程序员( ),开发了一个Go语言的路劲追踪软件( ),可以用来绘制各种图形,其中就有绘制Go语言吉祥物的:


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源


反正我觉得Go语言的这只地鼠太好玩了,分分钟想“捏爆”它有木有~
不为什么,光冲这么萌的吉祥物我也要学习Go语言。


4.历年年度编程语言


Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

历年年度编程语言


其实2015年,C语言有好几个月都排在第一名,不过最终统计的时候还是Java胜出。


Go语言原来在2009年也曾获得年度编程语言称号。


号称“世界上最好的编程语言”的PHP在2004年证明过自己,但今年下滑了。


TIOBE的编程语言排行榜并不能说明哪一们语言就一定比其他语言好,它只是展示一个编程技术的大趋势,给各大公司或个人项目在选择编程语言时以一定参考。

“认真,你就输了~”


5.Go语言学习资源


Go语言官网(英语):


简易的Go语言入门教程(英语):

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

Tour of Go教程


简书上的


实验楼的


菜鸟教程的


6.Docker学习资源


Docker官网(英语):


Docker官方教程(英语):

一书


菜鸟教程网上的



7.总结


  1. 作为程序员,保持与时俱进是非常重要的。既要夯实基本技能,又要不断学习新技术。这也是为什么我常说程序员这个职业是很有意思的,因为很难找到一个职业,每天都可以学习新东西。所以如果你有(bu)幸(xing)成为一名程序员的话,我就要大大地“恭喜”你啦!可以参看我的以下几篇文章:








  2. Go语言应该是不错的,虽然我目前还没怎么用过,但我有在工作中用过Go语言写的Docker。我们开发组前不久倒是举办了一个小型的Go语言学习课程,花了2个小时来学习Go语言的基础知识(讲师是我们组里的一个同事)。

  3. 如果没有学过Docker,最好花点时间认识一下。Docker还是很有用的,现在我们开发组也用Docker配合Gitlab,Jenkins,SonarQube来铺设项目的版本控制、测试,编译,集成,在线演示。

  4. 学习新知识从来像现在这么方便,网络上满满的都是免费的好资源。如果你还要去花很高的价钱上什么几万元的培训课,那实在有点可惜了。在家就可以自学,有那钱还不如多旅游什么的。可以参看我的以下几篇文章:



  5. 不盲目跟风。今天Go貌似有点火,就一窝蜂都去学习Go语言的。我觉得提升自己的编程硬实力,例如架构能力,计算机技术的了解,编译原理,等等,是更重要的。语言嘛,只是一个工具而已。



我是谢恩铭,在法国巴黎奋斗的嵌入式软件工程师。
目前工作是Android嵌入式和app开发。
热爱生活, 喜欢游泳,略懂烹饪。

人生格言:向着标杆直跑

- End -





移动开发          243979243

操作系统          473867703
Web开发          383748359
C/C++              125963921
Java                  580543634
PHP                  580541558
游戏开发           581114781
Python               581115674
嵌入式               581117176
虚拟/增强现实  258158210


友情推荐
NiaoTech


安卓笔记侠

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

长按二维码关注 安卓笔记侠


程序员联盟
ProgrammerLeague

Go语言荣登2016年度编程语言宝座+Go和Docker学习资源

坚持原创

编程的黄金时代,程序员的ShowTime

小编在法国,注定您在这里能学到更多

长按二维码关注 程序员联盟

联系我们

QQ:413981577(群)
微信: frogoscar
地址: 法国巴黎
官网: coderunity.com
邮箱: enmingx@gmail.com
↓点击下方“阅读原文” 进入 简书原文

以上是关于如何使用Go语言是操作Docker的主要内容,如果未能解决你的问题,请参考以下文章

『干货​』Go语言使用Docker Remote API ,举个栗子!

Go语言的开源项目

Go语言系列1.3GO语言简介:Go语言开发的知名项目

使用 Docker 镜像构建 GO 语言环境

如何使用Docker部署一个Go Web应用程序

如何看待国内后台开发从Java转向Go的趋势?