golang使用DockerFile正確用法指南
問題背景
今天寸鐵想讓編寫好的go
程序在docker
上面跑,要想實(shí)現(xiàn)這樣的效果,就需要用到今天的主角:Docker File
,那怎么使用DockerFile
呢?
那具體怎么做呢?其實(shí)很簡單,不過網(wǎng)上的博客的一些命令筆者實(shí)操過,發(fā)現(xiàn)不夠完善!
小伙伴們要想實(shí)現(xiàn),看筆者的正確食用指南即可,減少大量踩坑的時(shí)間。
編寫Dockerfile
在你要運(yùn)行到容器的程序所在的文件夾創(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 # 運(yùn)行 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
具體替換為你的命名
運(yùn)行容器
使用如下命令運(yùn)行Docker
鏡像的容器
docker run --name mycontainer-12 my-golang-app
容器名為
mycontainer-12
,鏡像名為my-golang-app
。
具體可以根據(jù)你的實(shí)際情況進(jìn)行修改。
注意:run
之后 下次的容器名不能重復(fù)?。。?/p>
運(yùn)行結(jié)果如下:
這樣就運(yùn)行容器成功啦!
附:Go 使用Dockerfile構(gòu)建項(xiàng)目 mod 報(bào)錯(cuò)處理
1.情景
正在使用Dockerfile構(gòu)建Go項(xiàng)目鏡像的時(shí)候,遭遇到了executor failed running [/bin/sh -c go mod tidy]: exit code: 2
以及ERROR [internal] load metadata for docker.io/library/golang:1.19
報(bào)錯(cuò),經(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第一個(gè)報(bào)錯(cuò)executor failed running [/bin/sh -c go mod tidy]: exit code: 2
報(bào)錯(cuò)內(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
低于當(dāng)前項(xiàng)目的Go版本(當(dāng)前項(xiàng)目1.19).于是嘗試更換成golang:1.19-alpine3.15
,這次沒有mod
的報(bào)錯(cuò)了,但是有新的報(bào)錯(cuò).
3.2第二個(gè)報(bào)錯(cuò)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é)果
修改后重新運(yùn)行docker build -t xxx/xxx .
命令成功生成鏡像.希望能幫助到有相同問題的小伙伴^_^
總結(jié)
到此這篇關(guān)于golang使用DockerFile的文章就介紹到這了,更多相關(guān)golang使用DockerFile內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go slice 數(shù)組和切片使用區(qū)別示例解析
這篇文章主要為大家介紹了go slice 數(shù)組和切片使用區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01