广告
返回顶部
首页 > 资讯 > 后端开发 > GO >docker打包golang应用的过程分析
  • 415
分享到

docker打包golang应用的过程分析

docker打包golang应用dockergolang应用dockergolang打包 2023-05-14 05:05:46 415人浏览 独家记忆
摘要

目录一、错误的打包方式二、正确的打包流程三、使用scratch构建镜像四、参考以太坊的打包一、错误的打包方式 在本地环境编译,然后将可执行程序放入 alpine(Docker.io/

一、错误的打包方式

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

1.准备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

2.dockerfile

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

3.构建镜像

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

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

5.创建并运行容器

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

二、正确的打包流程

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

1.dockerfile

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

2.构建自己的go编译镜像

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

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

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

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

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

dockerfile2

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

5.打包

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

6.运行demo/go-hello:1.0

三、使用scratch构建镜像

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

1.dockerfile3

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

2.构建

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

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

运行

四、参考以太坊的打包

目录结构

dockerfile

# Support setting various labels on the final image
ARG COMMIT=""
ARG VERSION=""
ARG BUILDNUM=""
 
# Build Geth in a stock Go builder container
FROM golang:alpine as builder
 
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories
RUN 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.sum
COPY go.mod /web/
COPY go.sum /web/
RUN cd /web && go mod download
 
ADD . /web
RUN cd /web && go build -o ./cmd/app main.go
 
# Pull Geth into a second stage deploy alpine container
FROM alpine:latest
 
RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories
RUN apk add --no-cache ca-certificates
COPY --from=builder /web/cmd/app /usr/local/bin/
 
EXPOSE 8080
ENTRYPOINT ["app"]
 
# Add some metadata labels to help programatic image consumption
ARG COMMIT=""
ARG VERSION=""
ARG BUILDNUM=""
 
LABEL commit="$COMMIT" version="$VERSION" buildnum="$BUILDNUM"

到此这篇关于docker打包golang应用的文章就介绍到这了,更多相关docker打包golang应用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: docker打包golang应用的过程分析

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

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

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

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

下载Word文档
猜你喜欢
  • docker打包golang应用的过程分析
    目录一、错误的打包方式二、正确的打包流程三、使用scratch构建镜像四、参考以太坊的打包一、错误的打包方式 在本地环境编译,然后将可执行程序放入 alpine(docker.io/...
    99+
    2023-05-14
    docker打包golang应用 docker golang应用 docker golang打包
  • docker怎么打包golang应用
    今天小编给大家分享一下docker怎么打包golang应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、错误的打包方式在...
    99+
    2023-07-05
  • python中元组打包和解包的过程分析
    这篇文章主要讲解了“python中元组打包和解包的过程分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中元组打包和解包的过程分析”吧!在将多个以逗号分隔的值赋给一个变量时,多个...
    99+
    2023-06-20
  • docker打包Python环境的过程详解
    docker打包Python环境过程,步骤如下所示: 1 导出pip list下面的依赖包 pip freeze > requirements.txt 把导出的requi...
    99+
    2022-11-12
  • 分析PHP转Golang的过程
    随着互联网技术的不断发展,编程语言也在不断地涌现出来,不同的编程语言有不同的特点,以适应不同领域的需求。PHP 和 Golang 是两种比较常见的编程语言,它们各自有着自己的特点和优缺点,下面我们将对它们进行比较,并介绍 PHP 转 Gol...
    99+
    2023-05-14
  • Spring Boot应用通过Docker发布部署的流程分析
    目录手动部署1、idea创建spring boot项目2、项目打成 Jar 包3、构建 docker image4、查看并运行镜像插件部署运行推送命令将Spring Boot项目部署...
    99+
    2022-11-12
  • 使用Webpack打包的流程分析
    目录1、webpacks是什么?2、Webpack安装3、初始化项目4、使用webpack进行JS打包5、使用webpack进行CSS打包总结简单的说了一下webpack是干嘛的,和...
    99+
    2022-12-19
    使用Webpack打包 Webpack打包流程
  • Android应用程序(APK)的编译打包过程
    流程图:   我们重点关心的是(1)这个过程的输入是什么?(2)这个过程的输出是什么?(3)这个过程使用了什么工具?至于使用什么参数,可以自己去看对应命令的帮助文件,...
    99+
    2022-06-06
    程序 apk Android
  • python flask项目打包成docker镜像发布的过程
    1.编写python flask代码,简单写一个加法的接口,命名为sum.py import json from flask import Flask,request,render_...
    99+
    2023-03-19
    python 打包docker镜像 python flask docker镜像 python 打包 flask项目
  • 从源码构建docker-ce的过程分析
    目录准备环境获取源码编译前的准备工作添加dockerd的代理开始编译使用Delve调试参考准备环境 准备一台Linux主机,并在上面安装好docker-ce,安装好make,git就...
    99+
    2022-12-20
    源码构建docker-ce docker-ce docker-ce源码
  • 使用Git管理Linux应用程序的打包过程
    Git是一款非常流行的分布式版本控制系统,被广泛地应用于软件开发过程中。在Linux应用程序的开发过程中,使用Git能够方便地管理代码,并且能够快速地打包应用程序。本文将介绍如何。 准备工作 在开始之前,需要准备一些工作: 安装Gi...
    99+
    2023-10-13
    linux git 打包
  • ANDROID应用程序的混淆打包分享
    android应用程序的混淆打包1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示:targe...
    99+
    2022-06-06
    程序 Android
  • goland把go项目打包进docker镜像的全过程记录
    目录1. goland配置Dockerfile2. goland构建项目3. Dockerfile执行总结1. goland配置Dockerfile 项目中新建Dockerfile文...
    99+
    2022-11-11
  • Spring Boot使用Docker分层打包的设置方法
    Spring Boot项目使用docker容器, jar和war的分层打包。 Spring Boot 现在支持分层打包技术了, 我们也来用一用, 加速Docker打包, 构建的时候速...
    99+
    2022-11-12
  • Vite打包分割代码的详细过程记录
    目录1.什么是代码分割/code spliiting2.Vite 中 rollup code spliiting分割默认方法原理3.如何在Vite中配置(vite.config.ts...
    99+
    2022-11-13
  • Linux系统Docker 部署 ASP.NET Core应用的流程分析
    目录一、系统环境二、操作流程及途中遇到的问题一、系统环境 1、腾讯云轻量应用服务器CentOS7.6 二、操作流程及途中遇到的问题 1、SSH方式远程Linux ssh <u...
    99+
    2022-11-12
  • Golang函数的闭包应用实例分享
    Golang是一门编程语言,它以其简洁、高效、并发安全等特性,受到越来越多开发者的青睐。Golang的函数是值类型,具备高度的灵活性和扩展性,可以方便地实现闭包这一功能。闭包是函数中常用的技巧之一,它允许函数访问在外部作用域中定义的变量,并...
    99+
    2023-05-16
    Golang 闭包 应用实例
  • php微信小程序解包过程的案例分析
    这篇文章给大家分享的是有关php微信小程序解包过程的案例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这个解包只能看个大概1.找到小程序压缩包1、手机root或安装模拟器(我用的是夜神)2、在模拟器上安装微信...
    99+
    2023-06-14
  • PyQt5 关于Qt Designer的初步应用和打包过程详解
    目录Qt Designer的介绍1. 缘由2. 搭建2.1. 安装2.2. 打开2.3. 设计2.4. 转换3. 效果3.1. 引用3.2. 启动3.3. 打包3.4. 触发Qt D...
    99+
    2022-11-12
  • 学习如何使用golang高效打包应用程序:逐步指南
    高效使用Golang进行打包:一步步教你如何打包你的应用程序,需要具体代码示例引言:现代应用程序开发越来越注重性能和效率,而Golang作为一门高效、并发和可扩展的编程语言,备受开发者的喜爱。在Golang中,打包是将应用程序与所有依赖项打...
    99+
    2023-12-29
    应用程序 Golang 打包
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作