golang使用DockerFile正確用法指南
問題背景
今天寸鐵想讓編寫好的go程序在docker上面跑,要想實現(xiàn)這樣的效果,就需要用到今天的主角:Docker File,那怎么使用DockerFile呢?
那具體怎么做呢?其實很簡單,不過網(wǎng)上的博客的一些命令筆者實操過,發(fā)現(xiàn)不夠完善!
小伙伴們要想實現(xiàn),看筆者的正確食用指南即可,減少大量踩坑的時間。
編寫Dockerfile
在你要運行到容器的程序所在的文件夾創(chuàng)建Dockerfile之后復(fù)制如下內(nèi)容到創(chuàng)建的文件中。
FROM golang:latest # 設(shè)置工作目錄 WORKDIR /app # 復(fù)制 Go 程序源代碼到工作目錄 COPY dockerUper.go . # 編譯 Go 程序 RUN go build -o dockerUper dockerUper.go # 運行 Go 程序 CMD ["sh", "-c", "./dockerUper"]
dockerUper 替換為具體你編寫的文件名
文件夾的結(jié)構(gòu)如下:

創(chuàng)建鏡像
使用如下命令創(chuàng)建docker鏡像
docker build -t my-golang-app .
這里創(chuàng)建的鏡像名為
my-golang-app具體替換為你的命名

運行容器
使用如下命令運行Docker鏡像的容器
docker run --name mycontainer-12 my-golang-app
容器名為
mycontainer-12,鏡像名為my-golang-app。
具體可以根據(jù)你的實際情況進行修改。
注意:run之后 下次的容器名不能重復(fù)?。?!

運行結(jié)果如下:

這樣就運行容器成功啦!
附:Go 使用Dockerfile構(gòu)建項目 mod 報錯處理
1.情景
正在使用Dockerfile構(gòu)建Go項目鏡像的時候,遭遇到了executor failed running [/bin/sh -c go mod tidy]: exit code: 2以及ERROR [internal] load metadata for docker.io/library/golang:1.19報錯,經(jīng)過一番折騰,終于解決,記錄一下!
2.一開始的Dockerfile
FROM golang:alpine as builder WORKDIR /go/web-api # 為我們的鏡像設(shè)置必要的環(huán)境變量 ENV GO111MODULE=on ENV CGO_ENABLED=0 ENV GOPROXY=https://goproxy.cn,direct ENV GOOS=linux ENV GOARCH=amd64 COPY . . RUN go mod tidy RUN go build -o server .
3.解決方案
3.1第一個報錯executor failed running [/bin/sh -c go mod tidy]: exit code: 2
報錯內(nèi)容
------ > [builder 4/5] RUN go mod tidy: #8 0.275 go: unknown subcommand "mod" #8 0.275 Run 'go help' for usage. ------
按照提示信息顯示,找不到命令.懷疑是golang:alpine低于當前項目的Go版本(當前項目1.19).于是嘗試更換成golang:1.19-alpine3.15,這次沒有mod的報錯了,但是有新的報錯.
3.2第二個報錯ERROR [internal] load metadata for docker.io/library/golang:1.19
------ > [internal] load metadata for docker.io/library/golang:1.19-alpine3.15: ------ failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status code [manifests 1.19-alpine3.15]: 400 Bad Request
好像是鏡像問題,隨即查閱一番資料,得到結(jié)論,原來是Docker Desktop的設(shè)置問題,需要將setting->Docker Engine的json配置文件中的
"features": {
"buildkit": true
},
修改為false即可.
4.修改后結(jié)果
修改后重新運行docker build -t xxx/xxx .命令成功生成鏡像.希望能幫助到有相同問題的小伙伴^_^
總結(jié)
到此這篇關(guān)于golang使用DockerFile的文章就介紹到這了,更多相關(guān)golang使用DockerFile內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)
這篇文章主要介紹了Go語言循環(huán)遍歷含有中文的字符串的幾種方法,文章通過代碼示例講解的非常詳細,具有一定的參考價值,感興趣的小伙伴跟著小編一起來看看吧2023-07-07
Golang語言中的Prometheus的日志模塊使用案例代碼編寫
這篇文章主要介紹了Golang語言中的Prometheus的日志模塊使用案例,本文給大家分享源代碼編寫方法,感興趣的朋友跟隨小編一起看看吧2024-08-08
破解IDEA(Goland)注冊碼設(shè)置 license server一直有效不過期的過程詳解
這篇文章主要介紹了破解IDEA(Goland)注冊碼設(shè)置 license server一直有效不過期,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

