golang使用DockerFile正确用法指南

 更新时间:2024年03月16日 10:35:44   作者:寸 铁  
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 替换为具体你编写的文件名

文件夹的结构如下:

创建镜像

使用如下命令创建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 Enginejson配置文件中的

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

修改为false即可.

4.修改后结果

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

总结

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

您可能感兴趣的文章:

相关文章

  • Go中GoFrameMap转换详解

    Go中GoFrameMap转换详解

    本文详细解析了Go语言中gconv.Map()方法的实现原理,该方法通过递归处理将各种数据类型转换为map[string]any格式,感兴趣的可以了解一下
    2026-05-05
  • Go语言循环遍历含有中文的字符串的方法小结

    Go语言循环遍历含有中文的字符串的方法小结

    这篇文章主要介绍了Go语言循环遍历含有中文的字符串的几种方法,文章通过代码示例讲解的非常详细,具有一定的参考价值,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07
  • Golang 中的 条件变量(sync.Cond)详解

    Golang 中的 条件变量(sync.Cond)详解

    这篇文章主要介绍了Golang 中的 条件变量(sync.Cond)详解的相关资料,需要的朋友可以参考下
    2022-12-12
  • 浅谈Golang是如何读取文件内容的(7种)

    浅谈Golang是如何读取文件内容的(7种)

    这篇文章主要介绍了浅谈Golang是如何读取文件内容的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • go实现图片拼接与文字书写的方法实例

    go实现图片拼接与文字书写的方法实例

    这篇文章主要给大家介绍了关于go实现图片拼接与文字书写的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • golang bufio包中Write方法的深入讲解

    golang bufio包中Write方法的深入讲解

    这篇文章主要给大家介绍了关于golang bufio包中Write方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • 用go gin server来做文件上传服务

    用go gin server来做文件上传服务

    今天小编就为大家分享一篇关于用go gin server来做文件上传服务,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Go语言中序列化与反序列化示例详解

    Go语言中序列化与反序列化示例详解

    我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,Go语言当然也支持所有这些编码格式,下面这篇文章主要给大家介绍了关于Go语言中序列化与反序列化的相关资料,需要的朋友可以参考下
    2022-07-07
  • Golang语言中的Prometheus的日志模块使用案例代码编写

    Golang语言中的Prometheus的日志模块使用案例代码编写

    这篇文章主要介绍了Golang语言中的Prometheus的日志模块使用案例,本文给大家分享源代码编写方法,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 破解IDEA(Goland)注册码设置 license server一直有效不过期的过程详解

    破解IDEA(Goland)注册码设置 license server一直有效不过期的过程详解

    这篇文章主要介绍了破解IDEA(Goland)注册码设置 license server一直有效不过期,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论