位置:首页 » 技术 » 开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

日期:2016-10-22 阅读:145num
Advertisement

开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

当我尝试开发一个在IronWorkerr上运行的非常简单的程序的时候,我发现目前为止没有一个工具可以让人在几分钟之内运行一段Go的示例代码。但在其他语言里面这是可以很容易做到的,因为他们不像Go一样需要设置GOPATH环境变量,遵守一个特定的代码目录结构,而且他们通常还有更简单的依赖管理工具。

有什么更好的方式吗?

我最近想了很多,也写了很过关于Docker的文章,并尝试在所有能使用Docker的情境下都坚持使用 Docker(是的,我是Docker的超级粉丝)。大部分原因是因为在 Iron.io ,我们从事Docker的相关工作。我们运行了很多Docker容器,真的很多。在这期间,我已经意识到Docker的强大与疯狂之处。相信我,这不只是炒作。

我们向用户展示如何使用Docker容器构建和测试他们的Go语言程序已经有一段时间了,但始终有一个痛点,让我们如鲠在喉。那便是用户需要将代码放到特定的目录,配置 GOPATH环境变量,使用一个第三方工具如godep来加载和代理依赖(注意通常这些依赖和你的代码一样,也需要被版本控制管理),有序的加载相关目录等等。这些当然可以完成,但是总是让人觉得不够爽。

现在,这个流程变得更好些了。

基于Docker的Go工具

我创建了一个基于Docker的go工具——“ treeder/go ”,他让Go语言开发变得超级简单。你唯 一需要安装的只有Docker。下面是一些它的一些功能和好处:

  • 你不需要安装 Go
  • 你不需要安装这些相关的工具
  • 你不需要配置 GOPATH 环境变量
  • 你不需要将你的代码放到特定的目录(如: /src/github.com/user/hello)或者 Go 的安装目录, 你可以任意放置你的代码。
  • 不需要重写代码里面依赖导入目录就可以加载相应依赖
  • 代码交叉编译
  • 代码静态编译
  • 将代码打包成 Docker 镜像(一个命令即可搞定,然后你将得到一个包含你的代码的镜像)
  • 构建远端 git 仓库的代码

演示

基础部分

让我们先来写个简单的例子,首先复制粘贴下面的代码到一个叫app.go的文件,放到任意目录。

package main

import (

"fmt"

"log"

"net/http"

"github.com/gorilla/mux"

)

func main() {

r := mux.NewRouter()

r.HandleFunc( "/" , Hello)

http.Handle( "/" , r)

fmt.Println( "Starting up on 8080" )

log.Fatal(http.ListenAndServe( ":8080" , nil))

}

func Hello(w http.ResponseWriter, req *http.Request) {

fmt.Fprintln(w, "Hello world!" )

}

注意到这段代码有第三方依赖了吗?让我们来代理(vendor)依赖:

docker run --rm -v $PWD:/app -w /app treeder/go vendor

上述命令会把抵赖都放/vendor目录下

然后我们对代码进行构建:

docker run --rm -v $PWD:/app -w /app treeder/go build

接着,我们来运行代码:

docker run --rm -v $PWD:/app -w /app -p 8080:8080 iron/base ./app

打开浏览器,输入 http://localhost:8080. 哈哈,我们成功的通过 iron/base 这个基础镜像运行了我们的代码。它是一个包含了运行GO程序所需的所有东西的很小的镜像。

更酷炫的东西

构建一个包含你的代码的可以运行的Docker镜像怎么样?

docker run --rm -v $PWD:/app -w /app -v /var/run/docker.sock:/var/run/docker.sock treeder/go image username/myapp:latest

现在通过你的新镜像来运行代码吧:

docker run --rm -v $PWD:/app -w /app -p 8080:8080 iron/base ./app

再次打开 http://localhost:8080 ,哈哈,现在流程是不是更好了。这个镜像非常小。你可以通过输入 docker images 来查看这个镜像到底有好大,大概在12M左右吧。

或者你也可以下载和构建一个远程的代码仓库:

docker run --rm -v $PWD:/app -w /app treeder/go remote https://github.com/treeder/hello-app.go.git

最后你将得到一个包含这个远 程代码 仓库的代码的镜像。

结论

将Docker运用于开发再次胜利了,如果你之前开发过Go项目,你应该会感谢这个工具带来的简单和简洁。它仅仅是个实验阶段的工具,没有包含太多的其他工具链。不过,就我知道的而言,这应该是最简单的Go上手方式了。通过这个工具,仅仅告诉其他人一个代码仓库链接,他们就可以克隆,构建,运行代码而不需要任何初始化流程仅仅只需要Docker。

完整的文档和项目源代码请浏览

https://github.com/treeder/go

更新:我做了一个更大更好的工具

https://github.com/treeder/devo

ps

请不要吝啬你的任何反馈,创建一个 Githubissue 或者评 论吧。

Wise2C ∣ 一个有用的公众号

开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

长按,识别二维码,加关注

点击“ 原文阅读 ”可查看翻译原文

开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具的相关内容

相关文章
  • 开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具 开发 Go 项目最简单的方式:一个基于 Docker 的 Go 工具

    " 当我尝试开发一个在IronWorkerr上运行的非常简单的程序的时候,我发现目前为止没有一个工具可以让人在几分钟之内运行一段Go的示例代码.但在其他语言里面这是可以很容易做到的,因为他们不像Go一样需要设置GOPATH环境变量,遵守一个特定的代码目录结构,而且他们通常还有更简单的依赖管理工具. 有什么更好的方式吗? 我最近想了很多,也写了很过关于Docker的文章,并尝试在所有能使用Docker的情境下都坚持使用 Docker(是的,我是Docker的超级粉丝).大部分原因是因为在 Iron

  • 没有项目经验怎么开始做一个基于web的系统

    没有项目经验如何开始做一个基于web的系统? 毕业设计要做一个基于Web的OA用户管理系统,传说功能很简单: 1. 机构管理: 2. 用户及用户权限管理. 我学渣没有项目经验,不知道如何下手.究竟应该怎么开始做这个系统?真的摸不着,求大神指点迷津. ------解决方案-------------------- 如果你离交毕业设计还有几个月的时间,如果框架也学的不怎么好,又想能学到东西,建议找个OA项目,再上面修改 ------解决方案-------------------- 找个开源的OA系统

  • 用 Kafka 和 HBase 构建一个基于 Docker 的数据采集器

    本文主要介绍在Docker上,用Kafka和HBase构建一个数据采集器,并用这个采集器用来记录Caltrain Rider这款应用的GPS数据.本文只是一个简单的实践,读者可以将此方法进行拓展,以更好的学习Docker.http://dockerone.com/article/241 --cut--

  • 一个基于 XMPP 的通讯工具,会有人需要用吗

    比如公司团队内部通信,自己搭一个openfire即可用 --cut-- Registering在2014-12-25 14:50:1回答到: android端的,毕业设计做的,像维护下去.有人用动力大一点 yylyyl在2014-12-25 15:04:0回答到: XMPP 的话为什么不用其他客户端呢- 服务端竟然也是 现成的- ahu在2014-12-25 15:26:4回答到: 我原先也是痴迷xmpp,后来发现用不着.因为xmpp相对来说传输的冗余数据多了点,可以考虑其他方案 skyxin8

  • 参照 Zeplin 与 POP 做一个基于 Sketch 的原型工具,如何?

    Zeplin 可以把设计的每个页面的元素清晰的展示出来,设计师不用每个元素都标注了,程序员也能方便的查看. POP 可以把手绘的原型图,拍照后加上跳转,制作成带交互动效的原型. 结合这两者,在 Zeplin 基础上加上交互,把页面跳转加上,可以直接在手机上看效果. --cut-- ldehai在2016-05-09 01:32:47回答到: Zeplin https://zeplin.io POP https://popapp.in/ adi在2016-05-09 01:32:47回答到: 好想

  • 基于 Docker 的移动应用开发云服务,仅需五分钟创建一个动态的移动 APP 基于 Docker 的移动应用开发云服务,仅需五分钟创建一个动态的移动 APP

    Hi All, 时速云是一个MVC 一体的移动应用开发云服务,能将移动应用的开发缩短至几个小时.平台基于Docker container, 采用Node.js编写.我们能非常快速得创建支持CRUD(创建,获取,更新,删除)操作的移动应用和Web应用. 产品地址:https://www.tenxcloud.com 下面来介绍一下我们的产品具体能做什么吧,欢迎拍砖^_^ 时速云能最大限度地帮助企业.开发者和梦想家快速实现移动应用的开发,我们首创的MVC一体的移动应用开发云服务能将移动应用的开发缩短至

  • 使用MAVEN和Eclipse开发Web项目依赖库的有关问题 使用MAVEN和Eclipse开发Web项目依赖库的有关问题

    使用MAVEN和Eclipse开发Web项目依赖库的问题 使用Maven和Eclipse开发web项目时,会出现一个问题,就是发布调试的时候,lib不会自动拷贝到WEB-INF/lib之下,导致classnotfound的错误. 解决方法: 1."Maven " –> "Enable dependency Management" 2.Web Deployment Assembly中添加maven dependencies 步骤如下图: 工程 -> 右键

  • 怎么使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用 怎么使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用

    如何使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用? 本文作者 Jacek Laskowski 拥有近20年的应用程序开发经验,现 CodiLime 的软件开发团队 Leader,曾从 IBM 取得多种资格认证.在这篇博文中,Jacek 分享了 Warsaw Scala Enthusiasts Meetup 上 Rafal Krzewski 介绍的一个 Docker sbt 插件.本文系 OneAPM 工程师编译整理: 虽然在 DeepSense.i

  • 最近团队开发个项目,需要知道android联网方式,需高人解答~ 谢啦解决思路

    最近团队开发个项目,需要知道android联网方式,急需高人解答~ 谢啦 团队开发了一个手机客户端,和服务器连接的时候,可能会出现网络情况不好,或者是换网络连接的情况,所以需要得到当前的联网方式,比如用GPRS联网,或者使用WIFI联网 在网上搜了搜也没找到相关的答案,希望高人解答 ------解决方案-------------------- ConnectivityManager conn = (ConnectivityManager)context.getSystemService(Cont

  • MyEclipse + Tomcat 开发web项目内存储器配置方式

    MyEclipse + Tomcat 开发web项目内存配置方式 1.修改eclipse.ini 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: -vmargs -Xmx512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m 2.设置Default VM Arguments 在myEclipse中,打开Windows-> Pref

  • eclipse集成jetty开发web项目(不采用maven方式) eclipse集成jetty开发web项目(不采用maven方式)

    以前开发过程部署项目都是采用tomcat,偶然发现jetty,所以试了下,挺方便的,直切主题. 1.下载jetty,楼主使用的jetty8,地址 http://download.eclipse.org/jetty/ 2.下载完成后,解压缩,cd到jetty路径下,运行命令: java -jar start.jar 3.默认端口号8080,访问http://localhost:8080,出现jetty welcome界面 到此,说明jetty已经安装成功! 关于eclipse集成jetty开发we

  • 一个Android开发小项目,求评估工作量和外包价格解决方案

    一个Android开发小项目,求评估工作量和外包价格 一个Android平台的客户端软件 功能描述: 1.能够实现点对点即时通讯,基本功能类似于QQ, 区别是,对象间有从属关系, 只能跟直接下属和直接上司通信, 不能越级,通信最好不通过服务器: 2.能够跟远程服务器交互,能通过服务器, 获取和控制跟服务器连接的智能设备: 3.智能设备的种类和数量保持扩展性. 请高手们评估一下: 1.对于正常的开发人员,要多少人月? 2.如果外包,需要多少钱? 非常感谢! ------解决方案----------

  • 采取GDI图形编程机制,开发一个基于单文档的简单图形绘制应用程序,要求是利用定时器,绘制一个由浅红色到深红色的渐变圆形

    采用GDI图形编程机制,开发一个基于单文档的简单图形绘制应用程序,要求是利用定时器,绘制一个由浅红色到深红色的渐变圆形. 采用GDI图形编程机制,开发一个基于单文档的简单图形绘制应用程序,要求是利用定时器,绘制一个由浅红色到深红色的渐变圆形.我做了很久,不能再Ondraw里面绘制,是要由定时器控制的,也就是定时器打开就开始画圆,定时器关闭画圆停止,请教如何实现 ------解决方案-------------------- 如果不想一刷新就消失,一般还是OnDraw,你可以用开关控制是否话 ---

  • 麻烦哪位高手能给一个基于SMPP协议开发简单范例或源码吗

    麻烦谁能给一个基于SMPP协议开发简单范例或源码吗? 如题![email protected] 分享到: 更多 ------解决方案-------------------- http://blog.csdn.net/wwmusic/article/details/8858706 http://blog.csdn.net/tounaobun/article/details/8163842 http://bbs.csdn.net/topics/390501684

  • 新人,对于安卓的开发只停留在筹建安卓开发环境,求问能做一个简单的APP吗

    新人,对于安卓的开发只停留在搭建安卓开发环境,求问能做一个简单的APP吗 RT,老师不知任务,但是水平有限,目前对于语言的认知基本上为0,但是想做一个简单的APP,尽可能少用到语言. 能做一个什么样的软件呢 --cut-- 多看别人的代码,我也是刚刚起步的,问题不是对语言不熟,而是对这个环境不熟. --cut-- 完全可以,你只需要创建一个安卓工程,然后往窗体里拖几个控件,然后运行,一个最基本的APP就成了,我也是刚学,一起努力吧! --cut-- 找一些开源的软件 学习 --cut-- 引用:

  • 小弟我的VB6开发的项目目录中有一个扩展名为.uzy的文件,这类文件是做什么用的 小弟我的VB6开发的项目目录中有一个扩展名为.uzy的文件,这类文件是做什么用的

    我的VB6开发的项目目录中有一个扩展名为.uzy的文件,这类文件是做什么用的? 我的VB6开发的项目目录中有一个扩展名为.uzy的文件,这类文件是做什么用的? 分享到: ------解决方案-------------------- 不知道你是什么样的工程会有这样的文件,如果不是程序需要的相关文件,可以删除 ------解决方案-------------------- 没听说VB项目中有这种文件. ------解决方案-------------------- File Extension UZY

  • 想做一个实时对战的小游戏,几个好友可以一起玩,然后计算分数的,有没有什么简单的方式?

    H5 可行吗?或者什么其他的方法, Android ? iOS ? --cut-- YuJianrong在2016-06-26 03:32:27回答到: 没有简单的方式. 不管用什么方法. wilddog在2016-06-26 03:32:27回答到: 用野狗,下载 JS SDK , H5 实现,野狗可以帮你实现实时的数据传输. 顺便分享一个 demo 实时飞机大战,可以直接拿来用 https://github.com/WilddogTeam/demo-js-starwars amaranthf

  • Android开发把项目打包成apk Android开发把项目打包成apk

    Android开发把项目打包成apk . 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk".将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装.Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装.生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们

  • 利用maven创办webx3项目——实现简单的留言板(二) 利用maven创办webx3项目——实现简单的留言板(二)

    利用maven创建webx3项目--实现简单的留言板(二) 创建webx3项目 根据webx3的官方网站,www.openwebx.org,找到"创建一个webx应用",按照上面说的流程,就可以创建一个webx的项目. 具体流程这里就不说了,官网上已经写得很清楚了.下面主要解释一下可能存在疑惑的地方. 创建项目的命令为: ----------------------------------------------------------------- mvn archetype:gen

  • 施用MyEclipse开发Web项目并进行发布,运行,测试和调试 施用MyEclipse开发Web项目并进行发布,运行,测试和调试

    使用MyEclipse开发Web项目并进行发布,运行,测试和调试 本文将介绍如何使用 MyEclipse 来开发Web 项目(包括HTML,JSP,Servlet,Filter和后台Java 类),并进行发布,运行,测试和调试.本章将通过开发一个使用JDBC 进行登录验证的简单例子来给大家展示相关的操作过程. 那么哪些应用算是 Web 应用呢?简单说通过网络浏览器,例如IE,Firefox 等等上网看到的绝大多数网页,都属于Web 应用的范围,所以它的应用是非常的广的.要想做好一个Web 应用,

最新文章
  • 做技术必须是北上广么?

    一个北邮的小伙,来我这里两个月就要离职了,还未过试用期的.. 哎,一方面感慨北上广碾压国际庄的工资,另一方面感觉为什么都要北上广呢. 这边虽然技术没有什么大的长进,但是自己肯学的话肯定还是没有问题的啊. 后来又得知java一个技术不错的哥们也要走..是我们这里留不住人?还是世道变了.. 烦烦烦 --cut-- lbp0200在2016-05-09 06:21:32回答到: 当然是工资 lbp0200在2016-05-09 06:21:32回答到: 在北京办公室月租金5W,如果在小地方,租金省了,

  • Google Play 默认语言问题

    因为日本的速度相对快点,所以用日本的vps装了ss,结果现在手机Google Play首页都是日语 应用居多 好像也没找到什么设置的选项 可以有什么办法能解决吗= = --cut-- Lentin在2014-10-04 08:35:0回答到: 用美国代理试试,要是还是日区的话就可能锁区了 lovine在2014-10-04 08:41:2回答到: @Lentin 用美国的是正常的 不过现在自建的ss是日本的 - -速度快 没有其他的方法吗 anjunecha在2014-10-04 09:13:3

  • 若能一切随他去,便是世间自在人。 若能一切随他去,便是世间自在人。

    1.若能一切随他去,便是世间自在人. 2.感谢上苍我所拥有的,感谢上苍我所没有的. 3.来是偶然的,走是必然的.所以你必须,随缘不变,不变随缘. 4.别人永远对,我永远错,这样子比较没烦恼. 5.愚痴的人,一直想要别人了解他.有智慧的人,却努力的了解自己. 6.如果你准备结婚的话,告诉你一句非常重要的哲学名言「你一定要忍耐包容对方的缺点,世界上没有绝对幸福圆满的婚姻,幸福只是来自于无限的容忍与互相尊重. 7.我的财富并不是因为我拥有很多,而是我要求的很少. 8.不是某人使我烦恼,而是我拿某人的言

  • 适合教师节唱的歌曲有哪些 适合教师节唱的歌曲有哪些

    教师节歌曲一:<感谢有你,老师> 我像迷途羔羊 每当陷入迷惘 你总是在我身旁 指引正确的方向 曾经年少轻狂 曾经意志飞扬 你总是在我身旁 照耀永恒的明光 你带给我喜悦和平安 无限的恩情满怀温暖 你带给我改变和成长 飞越宽广的门窗 感谢有你日子更有意义 感谢有你生命充满涟漪 在我的人生旅途中 您就像一座灯塔 照耀着我指引着我正确的方向 误入歧途这四个字才没有出现过 千言万语都无法表达我的心意 只有衷心的对你说一声 谢谢你老师 你带给我喜悦和平安 无限的恩情满怀温暖 你带给我改变和成长 飞越宽广的

  • win7系统电脑机箱异常如何解决 机箱异响 win7系统电脑机箱异常如何解决 机箱异响

    win7系统在使用的时候可能会遇到各种各样的故障,不少用户反应最多的就是电脑的机箱出现了故障,有很大的噪音,这不但影响了用户上网的心情,而且长期下去对于电脑是十分不利的.那么win7系统电脑机箱异常如何解决呢?下面来看看具体的解决方法: 1.如果电脑机箱出现的声音是"嗡嗡嗡"或者是"卡卡卡",响声很大的话,那么一般可以确定就是风扇出现了问题.这时候可以打开机箱检查风扇螺丝是不是松动了,转速是不是慢了下来.也可能是风扇的润滑油不够而引起的,这时候要及时更换风扇,一般一

  • 4.7英寸摩托XPhone功能 4.7英寸摩托XPhone功能

    随着谷歌I/O大会的临近,有关摩托罗拉X Phone的传闻也越来越多.除了此前泄露的跑分成绩之外,现在又有疑似该机的定制版本XT1058通过了FCC的测试和认证,有可能在近期内被正式发布. 通过FCC认证 从此次FCC(联邦通信委员会)公布的资料来看,这款摩托罗拉XT1058手机的背部有三个圆圈,从上往下依次似乎应该是内置摄像头.LED闪光灯以及摩托罗拉的Logo,这正好与两个月前曝光的摩托罗拉XT912A外形完全一致.不仅如此,该机在网络上还将支持美国运营商AT&T的LTE 4G频段,并具备N

  • 在版权娱乐公司的淫威之下 探秘私有BT网站 在版权娱乐公司的淫威之下 探秘私有BT网站

    在版权娱乐公司的淫威之下,海盗湾, TorrentSpy, MiniNova, Suprnova,BTChina等大批公开BT站点均已香消玉损.不过BT界的一批真猛士们则对此毫不在意,通过架设私有BT站点,他们照样可以上传和下载盗版多媒体文件,游戏和各种软件,而且几乎不会受到版权娱乐公司的骚扰,与公有BT站点不同,这些私有BT站点只有极少数熟客才可以进入.以下,就让我们进入这个相对陌生的世界,为大家揭开笼罩在私有BT站点头上的神秘面纱. 私有BT站点及其后盾简介: 私有BT站点的组织甚为严密,用

  • 微信电话本开通免费通话激活失败怎么办? 微信电话本开通免费通话激活失败怎么办?

    很多小伙伴们开通这一功能的时候都显示激活失败,而今日微信电话本官方微博发表消息称,因为APP刚刚推出,用户量过大,目前微信电话本相关服务(包括登录.注册.收取短信验证码.免费通话等功能)出现不稳定,给部分用户造成了影响,相关工作人员正在紧急处理中,将尽快恢复.看来要等官方修复了.

  • 最霸气的辞职理由:当国王了 辞职的奇葩理由 最霸气的辞职理由:当国王了 辞职的奇葩理由

    世界上有各种千奇百怪的辞职理由.我相信没有比这更霸气更牛的辞职理由了:我要当国王,并且这还是真的,不是炒作.就让本站小编为您盘点下辞职的更重奇葩理由吧. 最霸气的理由:我要当国王 32岁的艾瑞克·摩奴(出生在加纳,3年前他来到加拿大的不列颠哥伦比亚省做环卫工人,3年中他娶了一个加拿大姑娘,还剩拉一个健康的宝宝.本来他以为这一生就要这么度过啦.没想到6月份他接到一个电话,他的叔叔不久前去世,将部落首领的位置传给了他,本地的长者还有我的大家族,一致同意任命我为下一届部落之王.因此 艾瑞克·摩奴要辞职

  • 火星表面50万年前已存在液态水 火星表面50万年前已存在液态水

    目前,研究人员最新一项研究表明,火星表面存在流动水的时期可能比之前科学家预测的更近一些,通过观察火星表面沟渠,发现融化冰雪导致水流短时期内流经火星表面.这是由于50万年前火星出现倾斜,类似的一次倾斜时期曾出现在14万年前. 这项研究是由荷兰乌特勒支大学博士生特贾林-德哈斯(Tjalling de Haas)负责的,他们聚焦分析火星"伊斯托克"陨坑,它被认为形成于100万年前. 德哈斯认为,在伊斯托克陨坑形成50万年时,出现了几厘米深的泥泞冰水,这些冰水从陨坑壁流入底部.有趣的是,当时存

热门推荐