脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - golang使用DockerFile正确用法指南

golang使用DockerFile正确用法指南

2024-03-18 16:27寸 铁 Golang

docker在开发和运维中使用的场景越来越多,作为开发人员非常有必要了解一些docker的基本知识,而离我们工作中最近的也就是对应用的docker部署编排了,这篇文章主要给大家介绍了关于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 替换为具体你编写的文件名

文件夹的结构如下:

golang使用DockerFile正确用法指南

创建镜像

使用如下命令创建docker镜像

docker build -t my-golang-app .

这里创建的镜像名为my-golang-app 具体替换为你的命名

golang使用DockerFile正确用法指南

运行容器

使用如下命令运行Docker镜像的容器

docker run --name mycontainer-12  my-golang-app

容器名为mycontainer-12 ,镜像名为my-golang-app
具体可以根据你的实际情况进行修改。
注意:run之后 下次的容器名不能重复!!!

golang使用DockerFile正确用法指南

运行结果如下:

golang使用DockerFile正确用法指南

这样就运行容器成功啦!

附: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 Enginejson配置文件中的

"features": {
    "buildkit": true
  },

修改为false即可.

4.修改后结果

修改后重新运行docker build -t xxx/xxx .命令成功生成镜像.希望能帮助到有相同问题的小伙伴^_^

总结

到此这篇关于golang使用DockerFile的文章就介绍到这了,更多相关golang使用DockerFile内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/joeyoj/article/details/136573466

延伸 · 阅读

精彩推荐
  • GolangGolang中的path/filepath包用法

    Golang中的path/filepath包用法

    这篇文章主要介绍了Golang中的path/filepath包用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    思维的深度13412021-03-15
  • GolangGo gorilla/sessions库安装使用

    Go gorilla/sessions库安装使用

    这篇文章主要为大家介绍了Go gorilla/sessions库安装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    darjun8202022-08-13
  • GolangGo 源码里的这些 //go: 指令,你知道吗?

    Go 源码里的这些 //go: 指令,你知道吗?

    如果你平时有翻看源码的习惯,你肯定会发现。咦,怎么有的方法上面总是写着 //go: 这类指令呢。他们到底是干嘛用的?...

    脑子进煎鱼了10032021-11-10
  • Golang深入理解Golang Channel 的底层结构

    深入理解Golang Channel 的底层结构

    这篇文章主要介绍了深入理解Golang Channel 的底层结构,Go 语言的 channel 底层是什么数据结构?下面我们就一起来深入解析一下 channel,需要的朋友可以参考下...

    运维派3932022-08-29
  • GolangGolang获取当前时间代码

    Golang获取当前时间代码

    本文给大家汇总介绍了golang中的相关的时间的操作,有需要的小伙伴可以拿走参考下 ...

    ck_god2912020-05-20
  • Golanggo实现fping功能

    go实现fping功能

    这篇文章主要介绍了go实现fping功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    来我长街吹吹风10172021-02-19
  • Golang详解Go语言中的内存对齐

    详解Go语言中的内存对齐

    前面我们学习了Go语言空结构体详解,最近又在看unsafe包的知识,在查阅相关资料时不免会看到内存对齐相关的内容。虽然不会,但可以学呀,那么这篇文...

    漫漫Coding路8792022-11-27
  • Golang使用Go重试机制代码更可靠

    使用Go重试机制代码更可靠

    这篇文章主要为大家介绍了使用Go重试机制的使用,使你的代码更加可靠,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职...

    六号积极分子8032022-11-10