golang使用DockerFile正确用法指南
问题背景
今天寸铁想让编写好的go
程序在docker
上面跑,要想实现这样的效果,就需要用到今天的主角:Docker File
,那怎么使用DockerFile
呢?
那具体怎么做呢?其实很简单,不过网上的博客的一些命令笔者实操过,发现不够完善!
小伙伴们要想实现,看笔者的正确食用指南即可,减少大量踩坑的时间。
编写Dockerfile
在你要运行到容器的程序所在的文件夹创建Dockerfile
之后复制如下内容到创建的文件中。
FROM golang:latest # 设置工作目录 WORKDIR /app # 复制 Go 程序源代码到工作目录 COPY dockerUper.go . # 编译 Go 程序 RUN go build -o dockerUper dockerUper.go # 运行 Go 程序 CMD ["sh", "-c", "./dockerUper"]
dockerUper 替换为具体你编写的文件名
文件夹的结构如下:
创建镜像
使用如下命令创建docker
镜像
docker build -t my-golang-app .
这里创建的镜像名为
my-golang-app
具体替换为你的命名
运行容器
使用如下命令运行Docker
镜像的容器
docker run --name mycontainer-12 my-golang-app
容器名为
mycontainer-12
,镜像名为my-golang-app
。
具体可以根据你的实际情况进行修改。
注意: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 # 为我们的镜像设置必要的环境变量 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论