广告
返回顶部
首页 > 资讯 > 后端开发 > GO >docker怎么打包golang应用
  • 103
分享到

docker怎么打包golang应用

2023-07-05 19:07:11 103人浏览 薄情痞子
摘要

今天小编给大家分享一下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应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: docker怎么打包golang应用

本文链接: https://www.lsjlt.com/news/354868.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • docker怎么打包golang应用
    今天小编给大家分享一下docker怎么打包golang应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、错误的打包方式在...
    99+
    2023-07-05
  • docker打包golang应用的过程分析
    目录一、错误的打包方式二、正确的打包流程三、使用scratch构建镜像四、参考以太坊的打包一、错误的打包方式 在本地环境编译,然后将可执行程序放入 alpine(docker.io/...
    99+
    2023-05-14
    docker打包golang应用 docker golang应用 docker golang打包
  • Java应用打包成Docker镜像
    目录怎么把Java应用打包成Docker镜像?Maven插件构建镜像用Docker的多阶段构建打包镜像怎么把Java应用打包成Docker镜像? 对熟悉Docker的同学这应该是一个...
    99+
    2022-11-13
  • docker怎么打包commit和Dockerfile
    本篇内容主要讲解“docker怎么打包commit和Dockerfile”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“docker怎么打包commit和Dockerfile”吧!构建镜像构建镜像...
    99+
    2023-07-05
  • golang打包太大怎么办
    Golang作为一门快速、简洁的编程语言,现在越来越受到开发者的欢迎。开发者们在使用Golang时,有时会遇到一个问题,就是打包后的二进制文件太大。本文将探讨这个问题,并提供一些解决方案。一、Golang打包文件过大的原因静态链接Golan...
    99+
    2023-05-14
  • 怎么使用docker打包依赖环境
    使用Docker打包依赖环境可以通过以下步骤进行: 创建一个Dockerfile文件:在项目根目录下创建一个名为Dockerfi...
    99+
    2023-10-24
    docker
  • 怎么用Golang和Docker部署应用程序
    本文小编为大家详细介绍“怎么用Golang和Docker部署应用程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Golang和Docker部署应用程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步...
    99+
    2023-07-05
  • Angular怎么编译打包并使用Docker发布
    这篇文章给大家分享的是有关Angular怎么编译打包并使用Docker发布的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。环境:Angular CLI: 11.0.6Angular: 11.0.7Node: 12....
    99+
    2023-06-15
  • golang怎么部署docker
    随着近年来容器化技术的火热,Docker也成为了越来越多开发者、运维人员、IT从业者等的必备工具。而Golang语言的高并发优势也让它成为了不少开发者使用的首选语言。那么,如何将Golang应用部署到Docker容器中呢?本文将为大家介绍g...
    99+
    2023-05-14
  • golang包怎么使用
    Golang是一种高效、快速和稳定的编程语言,在软件开发领域受到广泛关注和应用。相比其他语言,golang有许多优势,其中之一是它丰富的标准库,这些库提供了开发者需要的各种工具和资源。在本文中,我们将详细介绍golang的包和如何使用这些包...
    99+
    2023-05-15
  • docker怎么将当前环境打包成镜像
    要将当前环境打包成 Docker 镜像,可以按照以下步骤进行操作:1. 在当前环境中创建一个 Dockerfile 文件,该文件是用...
    99+
    2023-10-19
    docker
  • 如何把SpringBoot应用打包成Docker镜像并运行
    本篇内容介绍了“如何把SpringBoot应用打包成Docker镜像并运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1) 首先要有一个...
    99+
    2023-06-04
  • 如何使用golang进行打包
    golang可以通过静态编译打包或者动态链接打包。详细介绍:1、静态编译打包步骤是编写代码、静态编译和交叉编译;2、动态链接打包步骤是编写代码、引入依赖和编译生成可执行文件。总的来说,静态编译打包适合于需要分发到不同环境而且不想依赖系统环境...
    99+
    2023-12-14
    go语言 Golang
  • golang中toolkits包怎么用
    这篇文章主要介绍了golang中toolkits包怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在查看 open-falcon 项目源码时,经常会看到其引用了一个类库 ...
    99+
    2023-06-27
  • golang expect包怎么使用
    本文小编为大家详细介绍“golang expect包怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang expect包怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这里如果使用su切换用...
    99+
    2023-06-27
  • golang怎么粘包
    在网络通信中,由于数据包的大小不固定,往往会出现粘包现象,即多个数据包被合并在一起发送到接收方,导致接收方无法正确解析数据包。为了解决这一问题,我们需要在代码上进行处理,使接收方能够正确解析数据包并进行相应处理。Go语言作为一门高性能的语言...
    99+
    2023-05-15
  • 使用Spring boot怎么打包部署应用
    今天就跟大家聊聊有关使用Spring boot怎么打包部署应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、Spring Boot内置webSpring Boot 其默认是集成w...
    99+
    2023-05-30
    springboot
  • 怎样为Linux打包Python应用
    本篇文章给大家分享的是有关怎样为Linux打包Python应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在基于 Debian 的操作系统(例如 Debian 或 Eleme...
    99+
    2023-06-16
  • Docker+Nginx打包部署前后端分离怎么实现
    这篇文章主要介绍“Docker+Nginx打包部署前后端分离怎么实现”,在日常操作中,相信很多人在Docker+Nginx打包部署前后端分离怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker+...
    99+
    2023-07-04
  • Pyinstaller打包怎么用
    这篇文章将为大家详细讲解有关Pyinstaller打包怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、安装pyinstallerPyInstaller是一个用来将Python程序打包成一个独立可执...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作