一. 準(zhǔn)備golang程序
package main
import "github.com/gin-gonic/gin"
func main() {
go func() {
r1 := gin.Default()
r1.GET("/sayHello/", func(c *gin.Context) {
c.JSON(200, "hello1")
})
r1.Run(":8992")
}()
r := gin.Default()
r.GET("/sayHello/", func(c *gin.Context) {
c.JSON(200, "hello")
})
r.Run(":8991")
}
二. 下載docker鏡像
默認(rèn)已經(jīng)安裝好docker
docker pull centos
三. 編譯二進制文件
我這里使用makefile
makefile文件如下
#!/bin/bash
export LANG=zh_CN.UTF-8
ENVARG=GOPATH=$(CURDIR) GO111MODULE=on
LINUXARG=CGO_ENABLED=1 GOOS=linux GOARCH=amd64
BUILDARG=-ldflags " -s -X main.buildTime=`date '+%Y-%m-%dT%H:%M:%S'` -X main.gitHash=(`git symbolic-ref --short -q HEAD`)`git rev-parse HEAD`"
gateway:
cd src; ${ENVARG} go build ${BUILDARG} -o ./projects/docker_demo/main ./projects/docker_demo/main.go;
linux_gateway:
cd src; ${ENVARG} ${LINUXARG} go build ${BUILDARG} -o ./projects/docker_demo/main ./projects/docker_demo/main.go;
執(zhí)行編譯linux二進制
make linux_gateway
報錯
查找原因網(wǎng)上說是因為os本身系統(tǒng)庫不兼容的問題,首先因為我是在macos上編譯linux的版本,所以需要安裝:
brew install FiloSottile/musl-cross/musl-cross
同樣參數(shù)要調(diào)整
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++
我這里看到應(yīng)該是cgo報的錯,我們這里是簡單的示例,沒用用到cgo,所以把CGO_ENABLED設(shè)置為0,就可以編譯通過
CGO_ENABLED=0
?CGO_ENABLED
?環(huán)境變量對我們程序的影響。?CGO_ENABLED
是用來控制golang 編譯期間是否支持調(diào)用 cgo 命令的開關(guān),其值為1或0,默認(rèn)情況下值為1,可以用?go env
?查看默認(rèn)值。
四. 編寫Dockerfile文件
# 指定基礎(chǔ)鏡像
FROM centos:latest
LABEL authors="docker-test"
# 設(shè)置工作目錄
WORKDIR /app/gateway
# 復(fù)制當(dāng)前目錄下的所有文件到工作目錄
COPY . .
# 聲明容器運行時需要暴露的端口
EXPOSE 8991 8992
# 定參
ENTRYPOINT ["./main"]
五. 構(gòu)建鏡像
docker build -t my-golang-app .
docker images | grep my-golang-app
#my-golang-app latest dfd4bab9dabd About a minute ago 239MB
運行鏡像
docker run -idt -p 8991:8991 -p 8992:8992 my-golang-app
#630728cd4ef04d4fc2ee94a986eaaed281d60bd74922126d4f345d12ed941c5f
docker ps
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#630728cd4ef0 my-golang-app "./main" 10 seconds ago Up 10 seconds 0.0.0.0:8991-8992->8991-8992/tcp charming_yonath
可以看到已經(jīng)運行起來
六.? 請求服務(wù)接口
?可以看到已經(jīng)通了
七. 推送images到docker hub
7.1 docker打tag
docker tag my-golang-app:latest 你的賬號/my-golang-app:latest
7.2 推送到docker hub
docker push pengdylan7/my-golang-app:latest
docker push 你的賬號/my-golang-app:latest
docker客戶端里可以看到推送成功文章來源:http://www.zghlxwxcb.cn/news/detail-486229.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-486229.html
到了這里,關(guān)于Docker 生成 golang 程序鏡像的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!