UDN-企业互联网技术人气社区

板块导航

浏览  : 1467
回复  : 0

[资源分享] 开发Go项目最简单的方式-一个基于Docker的go工具

[复制链接]
哥屋恩的头像 楼主
发表于 2016-10-22 13:03:19 | 显示全部楼层 |阅读模式
  “当我尝试开发一个在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的文件,放到任意目录。

  1. package main
  2. import (
  3.            "fmt"
  4.            "log"
  5.            "net/http"
  6.            "github.com/gorilla/mux"
  7. )
  8. func main() {
  9.           r := mux.NewRouter()
  10.           r.HandleFunc("/", Hello)
  11.           http.Handle("/", r)
  12.           fmt.Println("Starting up on 8080")
  13.           log.Fatal(http.ListenAndServe(":8080", nil))
  14. }
  15. func Hello(w http.ResponseWriter, req *http.Request) {
  16.          fmt.Fprintln(w, "Hello world!")
  17. }
复制代码


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

  
  1. Docker run --rm -v $PWD:/app -w /app treeder/go vendor
复制代码


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

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

  
  1. Docker run --rm -v $PWD:/app -w /app treeder/go build
复制代码


  接着,我们来运行代码:

  
  1. Docker run --rm -v $PWD:/app -w /app -p 8080:8080 iron/base ./app
复制代码


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

  更酷炫的东西

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

  
  1. Docker run --rm -v $PWD:/app -w /app -v /var/run/Docker.sock:/var/run/Docker.sock treeder/go image username/myapp:latest
复制代码


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

  
  1. Docker run --rm -v $PWD:/app -w /app -p 8080:8080 iron/base ./app
复制代码

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

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

  
  1. 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

原文作者: 赵峻伟  来源:开发者头条

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部