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语言LeetCode题解1030距离顺序排列矩阵单元格

    go语言LeetCode题解1030距离顺序排列矩阵单元格

    这篇文章主要为大家介绍了go语言LeetCode题解1030距离顺序排列矩阵单元格,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 浅谈Go语言中的次方用法

    浅谈Go语言中的次方用法

    这篇文章主要介绍了浅谈Go语言中的次方用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 详解golang中接口使用的最佳时机

    详解golang中接口使用的最佳时机

    接口在系统设计中,以及代码重构优化中,是一个不可或缺的工具,能够帮助我们写出可扩展,可维护性更强的程序,本文主要为大家介绍一下golang中接口使用的最佳时机,有兴趣的可以了解下
    2023-09-09
  • golang 实现菜单树的生成方式

    golang 实现菜单树的生成方式

    这篇文章主要介绍了golang 实现菜单树的生成方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Go函数的使用示例教程

    Go函数的使用示例教程

    这篇文章主要介绍了Go函数的使用示例,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • go slice 数组和切片使用区别示例解析

    go slice 数组和切片使用区别示例解析

    这篇文章主要为大家介绍了go slice 数组和切片使用区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 解决golang.org不能访问的问题(推荐)

    解决golang.org不能访问的问题(推荐)

    这篇文章主要介绍了解决golang.org不能访问的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 详解Golang的GC和内存逃逸

    详解Golang的GC和内存逃逸

    这篇文章主要给大家详细介绍了Golang的GC和内存逃逸,文章中有详细的代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • Go语言学习之goroutine详解

    Go语言学习之goroutine详解

    Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法,这篇文章主要介绍了Go语言学习之goroutine的相关知识,需要的朋友可以参考下
    2020-02-02
  • go语言操作之nacos配置中心

    go语言操作之nacos配置中心

    这篇文章主要介绍了go语言操作之nacos配置中心,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论