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

板块导航

浏览  : 978
回复  : 1

[技术交流] 如何将Golang程序部署到Busybox容器中

[复制链接]
开花包的头像 楼主
发表于 2016-8-3 20:19:19 | 显示全部楼层 |阅读模式
  本文章主要讲解了如何将我们的Golang程序编译部署到中进行超轻量级程序分发运行。

  BusyBox是一个的轻量级Linux系统,系统本身只有1MB的大小。非常适合Docker追求的目标与场景。使用BusyBox一定要做到零依赖,是单纯到极致的一个二进制文件。

  为了实现纯静态编译Golang程序,我们需要调整我们的编译参数。大部分时候,我们编译golang程序都会采用下面的命令:

  
  1. go build main.go
复制代码


  这样编译的程序其实是有动态依赖的,我们可以利用ldd命令来查看具体的动态库链接详情。

 
  1.  ldd main

  2.   linux-vdso.so.1 =\> (0x00007ffcbc16e000)

  3.   libpthread.so.0 =\> /lib64/libpthread.so.0 (0x00007f091ea83000)

  4.   libc.so.6 =\> /lib64/libc.so.6 (0x00007f091e6c2000)

  5.   /lib64/ld-linux-x86-64.so.2 (0x00007f091eca6000)
复制代码


  这里可以看到,还是有少部分系统动态库被依赖。这样直接在Busybox中部署会报某些依赖库不存在的错误。

  我们使用如下命令进行编译试试看:

  
  1. CGO_ENABLED=0 go build -a
复制代码


  此时,我们已经没法使用ldd来探测依赖了,因为已经是一个静态程序了。理论上来说,只要系统的应用程序格式一致,就可以运行该程序了。

  示例Dockerfile:

  1.   FROM busybox
  2. COPY ./main /usr/local/app/main
  3. CMD [“/usr/local/app/main”]
复制代码


原文作者:Misko Lee  来源:开发者头条

相关帖子

发表于 2016-8-4 10:33:15 | 显示全部楼层
 BusyBox是一个的轻量级Linux系统,系统本身只有1MB的大小。非常适合Docker追求的目标与场景。使用BusyBox一定要做到零依赖,是单纯到极致的一个二进制文件。
使用道具 举报

回复

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

本版积分规则

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