背景

前几篇文章,讲了两种不同的方法。分别是用openwrt-go和go-mips32两种方法,来生成golang的交叉编译工具链。本文打算说一下,怎么使用别人构建好的docker镜像,来进行golang交叉编译工具链的构建。

一、docker

  1. 搜索镜像
sudo docker search go-mips32

得到结果

NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
golang                         Go (golang) is a general purpose, higher-l...   1950                [OK]                
gogs/gogs                      Gogs is a painless self-hosted Git service.     416                                     [OK]
google/cadvisor                Analyzes resource usage and performance ch...   295                                     
google/cloud-sdk               Google Cloud SDKbundle with all components...   185                                     [OK]
ethereum/client-go             Official golang implementation of the Ethe...   126                                     [OK]
gogs/gogs-rpi                  Gogs Docker image for Raspberry Pi 2            41                                      
ipfs/go-ipfs                   Go implementation of IPFS, the InterPlanet...   41                                      [OK]
gocd/gocd-server               GoCD server running on docker                   38                                      
google/docker-registry         Docker Registry w/ Google Cloud Storage dr...   35                                      
allinurl/goaccess              Official build of GoAccess                      18                                      [OK]
iron/go                        Tiny Docker image for Go.                       10                                      
hairyhenderson/gomplate        A commandline Golang template processor         7                                       [OK]
conoro/go-mips32               Use this to Build MIPS32 Go/Golang 1.4.2 e...   6                                       
heroku/go                      Heroku Docker Go Image                          5                                       [OK]
trivago/gollum                 Gollum docker image                             3                                       [OK]
shutup/docker-go-mips32le      go-mips32le compile environment for mips32le    3                                       
resin/artik710-golang          Go (golang) is a general purpose, imperati...   2                                       
govuk/government-frontend      Public-facing app to display documents on ...   1                                       [OK]
garukun/golgtm                 github.com/garukun/golgtm                       1                                       
starkandwayne/concourse-go     Task Image for running Concourse Pipelines...   0                                       
besser/go-mips32                                                               0                                       
resin/artik710-fedora-golang   Go (golang) is a general purpose, imperati...   0                                       
lnterface/go-mips32le          Use this to Build MIPS32 Go/Golang 1.4.2 e...   0                                       [OK]
mcuadros/gop.kg                gop.kg                                          0                                       [OK]
paasmule/govc                  minimal debian based image with govc            0                                       [OK]
  1. 筛选结果
    上面的结果里面,只有两个可能符合要求的。
conoro/go-mips32               Use this to Build MIPS32 Go/Golang 1.4.2 e...
shutup/docker-go-mips32le      go-mips32le compile environment for mips32le
lnterface/go-mips32le          Use this to Build MIPS32 Go/Golang 1.4.2 e...
  1. 进一步筛选
    因为我的平台是mips32,不是mips32le。所以只有一个符合我的要求。遗憾的是,支持Go/Golang 1.4.2,没有更新版本的了。
  2. 其它arm平台的也可以搜索
sudo docker search go-arm

二、下载镜像

  1. 下载
#我用的v1,v2好像是有点问题(v1叫做docker的tag,有疑问请google)
docker pull conoro/go-mips32:v1
  1. 创建源代码目录
mkdir /tmp/golang-test
#创建完之后,把golang代码或者工程项目拷贝到这个目录(没有项目就弄个helloworld测试一下)
  1. 运行
sudo docker run -it -v /tmp/golang-test:/go/src conoro/go-mips32:v1 /bin/sh
#注意一下第一个冒号前面的那个目录和上面创建的存放golang工程项目的路径要一致。
#相当于把本地的目录,映射到docker那里吧。
  1. 如无意外就可以进入到docker系统了
  2. 因为刚刚我们把工程项目映射到/go/src,所以进入src就可以看到我们的工程了

三、编译

  1. 编译
go build main.go
  1. 环境变量
    理论上不需要声明环境变量了,docker镜像已经默认申明了
# export GOOS=linux
# export GOARCH=mips32
  1. 拷贝生成的执行程序
    因为刚刚我们把本地机的/tmp/golang-test映射到docker里面的/go/src。所以,如果刚刚生成的执行程序在/go/src里面,我们执行exit退出docker,回到本地系统,就可以在/tmp/golang-test找到执行程序。然后拷贝到路由器或者设备中测试一下。





http://xzh.i3geek.com

爱唠叨的老鱼

爱唠叨的老鱼

技术经理,个人站长,创业者

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据