我的编程空间,编程开发者的网络收藏夹
学习永远不晚

docker怎么打包golang应用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

docker怎么打包golang应用

今天小编给大家分享一下docker怎么打包golang应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、错误的打包方式

在本地环境编译,然后将可执行程序放入 alpine(docker.io/alpine:latest)

准备web程序

package main import (    "fmt"    "net/http") func main() {    server := &http.Server{        Addr: ":8888",    }     http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {        fmt.Fprintln(w, "hello world")    })     fmt.Println("server startup...")    if err := server.ListenAndServe(); err != nil {        fmt.Printf("server startup failed, err:%v\n", err)    }}

go build hello.go

dockerfile

FROM       docker.io/alpine:latestMAINTAINER demo <juest a demo> #alpine内的包管理RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories#安装bashRUN apk add --update bash && rm -rf /var/cache/apk/* RUN mkdir -p /data/goCOPY hello /data/go EXPOSE 8888 ENTRYPOINT ["/data/go/hello"]

构建镜像

docker build -t demo/go-hello:1.0 -f dockerfile .

将在本地生成将demo/go-hello:1.o镜像

docker怎么打包golang应用

创建并运行容器

docker怎么打包golang应用

原因:编译的hello二进制程序不是存静态程序,还依赖一些库,但这些库在alpine镜像中找不到。

二、正确的打包流程

需要放入alpine镜像里运行的go程序,可以直接使用golang:alpine来编译,但我们在golang:alpine基础上再构建一个镜像,这个镜像中包含bash、GO111MODULE、GOPROXY等环境变量。

dockerfile

FROM docker.io/golang:alpine RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN apk add --update bash && rm -rf /var/cache/apk/* # 为我们的镜像设置必要的环境变量ENV GO111MODULE=on \    CGO_ENABLED=0 \    GOOS=linux \    GOARCH=amd64\    GOPROXY=https://goproxy.cn,direct

构建自己的go编译镜像

docker build -t go-build:1.0 -f dockerfile .

docker怎么打包golang应用

运行go-build:1.0 镜像,编译go项目代码:

#xxx为本地go代码路径docker run -it --rm -v xxx:/data/go demo/go-build:1.0 /bin/bashcd /data/gogo build hello.go

生成了hello可执行文件,且为纯静态的。

docker怎么打包golang应用

将编译得到的hello二进制打入alpine:latest

dockerfile2

FROM       docker.io/alpine:latestMAINTAINER demo <juest a demo> #alpine内的包管理RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories#安装bashRUN apk add --update bash && rm -rf /var/cache/apk/* RUN mkdir -p /data/goCOPY hello /data/go EXPOSE 8888 ENTRYPOINT ["/data/go/hello"]

打包

docker build -t demo/go-hello:1.0 -f dockerfile2 .

运行demo/go-hello:1.0

docker怎么打包golang应用

三、使用scratch构建镜像

scratch为空镜像,适合那些没有任何外部依赖的程序,刚好前面的hello程序没有任何依赖!

dockerfile3

FROM      scratchMAINTAINER demo <juest a demo> COPY hello / EXPOSE 8888 ENTRYPOINT ["/hello"]

构建

docker build -t demo/go-hello:2.0 -f dockerfile3 .

以scratch为基础构建出来的镜像是最小的

docker怎么打包golang应用

运行

docker怎么打包golang应用

四、参考以太坊的打包

目录结构

docker怎么打包golang应用

dockerfile

# Support setting various labels on the final imageARG COMMIT=""ARG VERSION=""ARG BUILDNUM="" # Build Geth in a stock Go builder containerFROM golang:alpine as builder RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN apk add --no-cache gcc musl-dev linux-headers git ENV GO111MODULE=on \    CGO_ENABLED=0 \    GOOS=linux \    GOARCH=amd64\    GOPROXY=https://goproxy.cn,direct # Get dependencies - will also be cached if we won't change go.mod/go.sumCOPY go.mod /web/COPY go.sum /web/RUN cd /web && go mod download ADD . /webRUN cd /web && go build -o ./cmd/app main.go # Pull Geth into a second stage deploy alpine containerFROM alpine:latest RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositoriesRUN apk add --no-cache ca-certificatesCOPY --from=builder /web/cmd/app /usr/local/bin/ EXPOSE 8080ENTRYPOINT ["app"] # Add some metadata labels to help programatic image consumptionARG COMMIT=""ARG VERSION=""ARG BUILDNUM="" LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM"

以上就是“docker怎么打包golang应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

docker怎么打包golang应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker怎么打包golang应用

今天小编给大家分享一下docker怎么打包golang应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、错误的打包方式在
2023-07-05

docker打包golang应用的过程分析

这篇文章主要介绍了docker打包golang应用的过程分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-14

docker怎么打包commit和Dockerfile

本篇内容主要讲解“docker怎么打包commit和Dockerfile”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker怎么打包commit和Dockerfile”吧!构建镜像构建镜像
2023-07-05

怎么使用docker打包依赖环境

使用Docker打包依赖环境可以通过以下步骤进行:创建一个Dockerfile文件:在项目根目录下创建一个名为Dockerfile的文件。定义基础镜像:在Dockerfile中使用FROM命令来定义一个基础镜像,该镜像包含了你需要的操作系统
2023-10-24

怎么用Golang和Docker部署应用程序

本文小编为大家详细介绍“怎么用Golang和Docker部署应用程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Golang和Docker部署应用程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步
2023-07-05

Angular怎么编译打包并使用Docker发布

这篇文章给大家分享的是有关Angular怎么编译打包并使用Docker发布的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境:Angular CLI: 11.0.6Angular: 11.0.7Node: 12.
2023-06-15

如何把SpringBoot应用打包成Docker镜像并运行

本篇内容介绍了“如何把SpringBoot应用打包成Docker镜像并运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1) 首先要有一个
2023-06-04

c#窗体应用程序怎么打包

问题:如何打包 c# 窗体应用程序?答案:通过 visual studio 发布应用程序,选择文件夹作为部署目标,配置发布设置,生成发布包并将其安装在目标计算机上。具体步骤:发布应用程序选择文件夹作为部署目标配置发布设置(目标文件夹、配置、
c#窗体应用程序怎么打包
2024-05-12

使用Spring boot怎么打包部署应用

今天就跟大家聊聊有关使用Spring boot怎么打包部署应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、Spring Boot内置webSpring Boot 其默认是集成w
2023-05-30

怎样为Linux打包Python应用

本篇文章给大家分享的是有关怎样为Linux打包Python应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在基于 Debian 的操作系统(例如 Debian 或 Eleme
2023-06-16

docker怎么将当前环境打包成镜像

要将当前环境打包成 Docker 镜像,可以按照以下步骤进行操作:1. 在当前环境中创建一个 Dockerfile 文件,该文件是用来描述构建镜像的步骤和配置的。2. 在 Dockerfile 中,使用基础镜像作为构建环境的基础,例如 FR
2023-10-19

golang中toolkits包怎么用

这篇文章主要介绍了golang中toolkits包怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在查看 open-falcon 项目源码时,经常会看到其引用了一个类库
2023-06-27

golang expect包怎么使用

本文小编为大家详细介绍“golang expect包怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang expect包怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这里如果使用su切换用
2023-06-27

Pyinstaller打包怎么用

这篇文章将为大家详细讲解有关Pyinstaller打包怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、安装pyinstallerPyInstaller是一个用来将Python程序打包成一个独立可执
2023-06-20

如何使用golang进行打包

golang可以通过静态编译打包或者动态链接打包。详细介绍:1、静态编译打包步骤是编写代码、静态编译和交叉编译;2、动态链接打包步骤是编写代码、引入依赖和编译生成可执行文件。总的来说,静态编译打包适合于需要分发到不同环境而且不想依赖系统环境
如何使用golang进行打包
2023-12-14

SpringBoot应用的打包和发布怎么实现

本篇内容介绍了“SpringBoot应用的打包和发布怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 创建项目(example-f
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录