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

創(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之后 下次的容器名不能重復?。?!

運行結果如下:

這樣就運行容器成功啦!
附:Go 使用Dockerfile構建項目 mod 報錯處理
1.情景
正在使用Dockerfile構建Go項目鏡像的時候,遭遇到了executor failed running [/bin/sh -c go mod tidy]: exit code: 2以及ERROR [internal] load metadata for docker.io/library/golang:1.19報錯,經過一番折騰,終于解決,記錄一下!
2.一開始的Dockerfile
FROM golang:alpine as builder WORKDIR /go/web-api # 為我們的鏡像設置必要的環(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
報錯內容
------ > [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
好像是鏡像問題,隨即查閱一番資料,得到結論,原來是Docker Desktop的設置問題,需要將setting->Docker Engine的json配置文件中的
"features": {
"buildkit": true
},
修改為false即可.
4.修改后結果
修改后重新運行docker build -t xxx/xxx .命令成功生成鏡像.希望能幫助到有相同問題的小伙伴^_^
總結
到此這篇關于golang使用DockerFile的文章就介紹到這了,更多相關golang使用DockerFile內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go slice 數(shù)組和切片使用區(qū)別示例解析
這篇文章主要為大家介紹了go slice 數(shù)組和切片使用區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

