go build 打包二進制執行文件與 用 docker 打包 -鏡像 image- 入門
一、go 打包而進駐文件
1、安裝 go 環境
我們可以從官方 https://go.dev/dl
下載對應系統的 go 安裝文件。
我這裏是 mac 系統,x86 架構,所以我選擇了
安裝完成後執行一下 go version 輸出如下:
go version go1.19.7 darwin/amd64
2、新建一個實驗目錄
mkdir hello && cd hello && touch main.go
3、打開 main.go 補充代碼
package main
func main() {
println("hello world , hi")
}
4、build 打包一個可執行二進制文件 hello
go build -o hello ./main.go
此時我們用 tree 命令查看一下目錄:
➜ hello git:(master) ✗ tree
.
├── hello
└── main.go
0 directories, 2 files
生成了一個 hello 的二進制可執行文件
5、執行一下
➜ hello git:(master) ✗ ./hello
hello world , hi
二、本地打包的環境與版本以及各種依賴問題
我們發現,在這裏,我們打包的時候,首先下載了 go 的環境。
如果我們是一個團隊,有很多成員,那麼首先就需要每個人的環境,都得一致,
這樣打包後的文件才能一樣。
如果 go 版本不一致的話,那麼比我的事 1.14,其他熱的 1.19,如果用了新的方法,他在本地發現能用,但同樣的代碼,到我這就不能用了。
三、docker 打包
如果大家都用 docker 打包,在 docker 裏面配置一樣的環境和版本,就可以解決上面的問題。
我們先把 hello 這個文件刪掉,只留下 main.go,如下:
➜ hello git:(master) ✗ tree
.
└── main.go
0 directories, 1 file
1、生成 Dockerfile 文件
touch Dockerfile
2、安裝打包 go 的開發環境與版本
一般第一行,我們先構建環境,我們要執行 go 的代碼,那麼第一步需要安裝 go 環境。
通過 FROM 的語法如下:
FROM [--platform=<platform>] <image> [AS <name>]
FROM 指令初始化一個新的構建階段併爲後續指令設置 基本鏡像。因此,有效 Dockerfile 必須以 FROM 指令開始。鏡像可以是任何有效的鏡像——從公共存儲庫中提取鏡像特別容易。
在 Dockerfile 增加如下代碼:
#go環境
FROM golang:1.19
3、把需要執行的文件複製到 docker 內
我們使用 WORKDIR 指令在 docker 內新建一個目錄,
然後再使用 COPY 指令把本地需要執行的代碼,複製到 docker 內。
#go環境
FROM golang:1.19
# 在容器內設置 /hello 爲當前工作目錄
RUN mkdir /hello
WORKDIR /hello
# 把文件複製到當前工作目錄
COPY . .
4、執行 go build 生成二進制打包文件
我們增加一個 RUN 指令來在 docker 中,執行命令
在 Dockerfile 修改代碼變成如下:
#go環境
FROM golang:1.19
# 在容器內設置 /hello 爲當前工作目錄
RUN mkdir /hello
WORKDIR /hello
# 把文件複製到當前工作目錄
COPY . .
#執行go build生成二進制打包文件hello
RUN go build -o hello ./main.go
這樣我們就在 docker 內的 /hello 目錄下,生成了一個 hello 的二進制執行文件。
5、生成對外可供 docker run 執行 命令
如同在本地運行的時候,命名加到環境變量中醫院。
我們這裏使用 ENTRYPOINT 指令
ENTRYPOINT ["executable", "param1", "param2"] // 這是 exec 模式的寫法,注意需要使用雙引號
#go環境
FROM golang:1.19
# 在容器內設置 /hello 爲當前工作目錄
RUN mkdir /hello
WORKDIR /hello
# 把文件複製到當前工作目錄
COPY . .
#執行go build生成二進制打包文件hello
RUN go build -o hello ./main.go
# docker run 時執行命令
ENTRYPOINT ["./hello"]
之所以是 "./hello" 而非是 "hello" 是因爲,我們是在當前的目錄下的二進制文件。
6、構建 docker 鏡像
如上,我們已經把 Dockerfile 相關的配置好。
在 Dockerfile 同級目錄,執行 docker build 生成鏡像
語法如下:最後的 . 代表本次執行的上下文路徑。
$ docker build -t hello .
這個命名會自動尋找同名目錄下的 Dockerfile 文件,並執行。
此時我們查看一下 docker image 發現已經生成了 一個 hello 鏡像
➜ hello git:(master) ✗ docker image ls | grep hello
輸出:
hello
或者從 docker 客戶端上搜索如下:
7、執行,使用這個鏡像
我們使用 docker run 來執行鏡像
➜ hello git:(master) ✗ docker run hello
輸出:
hello world , hi
8、推送到遠程鏡像存儲
本地執行命令給鏡像打標籤
➜ docker tag hello registry.cn-beijing.aliyuncs.com/hishengg/hello:v1
本地執行命令推送到遠程鏡像
➜ docker push registry.cn-beijing.aliyuncs.com/hishengg/hello:v1
9、到遠程倉庫查看驗證
登入到阿里雲
https://cr.console.aliyun.com...
可以查看到我們剛纔推送的鏡像
點擊鏡像版本,可以查看詳情
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/BFUShEuynV7BbDjGXbLDFg