Mac下使用docker配置golang centos下編譯環境


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 注冊,注冊完成后進行登陸

https://hub.docker.com/

 

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,下次再進來就不會丟失在容器內的保存了

UntitledImage

參考: 在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中添加該目錄,才能進行掛載!

UntitledImage

然后在啟動時 -v 指定映射關系

docker run --privileged=true -v /Users/guohongjun/software:/software -it centos

-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄

參考:  Docker run 命令參數及使用

 

 

手工安裝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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM