golang 交叉編譯的典型一個場景是使用 go-sqlite3。
go-sqlite3 編譯需要 cgo , 但是交叉編譯 cgo 又需要很多庫,環境並不好配,編譯好執行有沒有問題還很麻煩。
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work.
所以直接裝個 docker 來運行要編譯的環境是最靈活的方案。
安裝Docker
1、安裝 docker 客戶端
下載地址: 官方下載地址
2、注冊賬號
點擊 Sign Up 注冊,注冊完成后進行登陸
3、安裝 centos
命令行執行
docker pull centos:centos6.9
4、執行 centos
docker run --privileged=true -it centos:6.9
--privileged是以獲取系統權限的形式運行,
-it是互動模式,跟本地的系統進行交互,調用的本地的終端
% docker run --privileged=true -it centos:6.9
Unable to find image 'centos:6.9' locally
6.9: Pulling from library/centos
Digest: sha256:6fff0a9edc920968351eb357c5b84016000fec6956e6d745f695e5a34f18ecd2
Status: Downloaded newer image for centos:6.9
[root@19c2ce3493ea /]#
保存docker鏡像
如果需要退出,直接用 exit 就可以退出,但是docker是不會保存你再容器中做過的修改的,
第二次進來容器,之前安裝過的東西都得重新安裝一遍,那怎么辦呢
解決辦法
在未退出來之前,另開一個窗口
先 docker ps
這個是你現在正在運行的容器
然后docker commit d83c4279f146 centos:6 #d83c4279f146是CONTAINER ID,centos:6是IMAGE,容器名
這樣之后再回到容器的那個窗口運行 exit,下次再進來就不會丟失在容器內的保存了

參考: 在mac上安裝Docker,並在Docker上安裝centos以及運行
下次進來 docker run --privileged=true -it centos
配置Centos
配置 centos 的yum源
我自己默認yum源這里 wget 都沒有, 需要先配置源
cd /etc/yum.repos.d
# 備份系統自帶的yum源
mv CentOS-Base.repo CentOS-Base.repo.save
# 手工下載 http://mirrors.163.com/.help/CentOS6-Base-163.repo
# 並通過 vi 把內容寫到 CentOS-Base.repo
# 更新緩存
yum makecache
之后再執行 就有 wget了。
yum install -y wget
在 /etc/yum.repos.d 目錄下,也配置下阿里雲的源,已備用
wget http://mirrors.aliyun.com/repo/Centos-6.repo
參考: https://www.jianshu.com/p/6bdb10adbad6
在 centos上配置 golang
yum install -y gcc
一些go程序的build需要gcc,所以要安裝。
參數 -y(當安裝過程提示選擇全部為"yes")
yum 源默認沒有golang的。
# Install on CentOS:
# Current version: 1.11
rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
yum install golang
安裝方法如上。
參考: https://cloud.tencent.com/developer/article/1478660
其中 rpm --import 導入簽名文件 (rpm --import /etc/pki/rpm-gpg/RPM* 有什么用?)
如果這個數據源下載太慢,也可以手工安裝golang
下載后的安裝方法
https://golang.org/doc/install?download=go1.13.8.linux-amd64.tar.gz
docker 上訪問物理機的目錄
在mac上面使用Docker掛載目錄時,需要先在Docker->preference中添加該目錄,才能進行掛載!

然后在啟動時 -v 指定映射關系
docker run --privileged=true -v /Users/guohongjun/software:/software -it centos
-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄
手工安裝golang
在映射的目錄下執行
tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz
vi /etc/bashrc
增加 配置
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/mygocodes
加載配置
source /etc/bashrc
注意:
啟動docker時后應該是非交互方式進入bash,因此就不會讀取profile文件,要從 /etc/bashrc 文件才能加載。
執行 go env 或 go version 就可以檢查安裝結果
同樣 gopath 也要配置
這樣啟動時,就可以訪問物理機的對應gopath目錄了。
docker run --privileged=true -v /Users/guohongjun/Documents/project/mygocodes:/home/mygocodes -it centos
