Dockerfile编写避坑指南,Go开发者必须掌握的7个关键技巧

第一章:Go语言Docker部署的核心挑战

在将Go语言应用部署到Docker环境中时,开发者常面临多个技术难点。尽管Go天生适合容器化——其静态编译特性可生成无依赖的二进制文件——但在实际部署过程中,仍需克服镜像优化、构建效率、运行时环境配置等问题。

镜像体积过大

使用基础镜像(如golang:1.21)进行构建时,最终镜像可能包含大量不必要的开发工具和依赖,导致体积膨胀。推荐采用多阶段构建策略,仅将编译后的二进制文件复制到轻量运行环境。
# 多阶段构建示例
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

# 使用最小基础镜像
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
上述Dockerfile通过两个阶段分离构建与运行环境,显著减小最终镜像大小。

构建速度与缓存失效

频繁变更源码会导致Docker层缓存失效,影响CI/CD效率。合理安排Dockerfile指令顺序可提升缓存命中率:
  1. 先拷贝go.mod和go.sum,执行go mod download
  2. 再复制源码,进行编译
  3. 确保依赖不变时跳过重复下载

运行权限与安全配置

以root用户运行容器存在安全隐患。应在Docker镜像中创建非特权用户并切换身份:
FROM alpine:latest
RUN adduser -D -s /bin/sh appuser
USER appuser:appuser
COPY --from=builder /app/main .
CMD ["./main"]
挑战类型常见表现推荐解决方案
镜像体积超过500MB多阶段构建 + Alpine镜像
构建效率每次均重新下载依赖分层拷贝go.mod优先
安全性root权限运行创建非root用户运行

第二章:Dockerfile基础构建技巧

2.1 理解镜像分层机制与构建上下文

Docker 镜像是由多个只读层组成的联合文件系统,每一层代表镜像构建过程中的一个步骤。这些层按顺序堆叠,上层仅记录与下层的差异,从而实现高效的存储和复用。
镜像分层结构示例
FROM ubuntu:20.04
COPY . /app
RUN apt-get update && apt-get install -y python3
CMD ["python3", "/app/hello.py"]
上述 Dockerfile 每条指令生成一个镜像层:基础系统层、应用代码层、依赖安装层和启动命令层。只有最后的 CMD 层可被覆盖。
构建上下文的作用
构建上下文是执行 docker build 时发送到 Docker 守护进程的本地文件目录。即使未在 Dockerfile 中引用,所有位于上下文路径内的文件都可能被包含,影响构建效率。
  • 分层机制支持缓存复用,提升构建速度
  • 上下文路径应尽量精简,避免传输冗余文件
  • 通过 .dockerignore 可排除无关文件

2.2 选择合适的基础镜像:从alpine到distroless

在构建轻量级容器镜像时,基础镜像的选择至关重要。不同的基础镜像直接影响镜像体积、安全性和运行时依赖。
Alpine Linux:轻量与功能的平衡
Alpine 是广泛使用的轻量级基础镜像,基于 musl libc 和 BusyBox,通常仅占用几 MB 空间。
FROM alpine:3.18
RUN apk add --no-cache curl
CMD ["sh"]
该示例使用 apk 包管理器安装 curl,--no-cache 参数避免缓存堆积,有助于减小层体积。
Distroless:最小化攻击面
Google 的 distroless 镜像不包含 shell 或包管理器,仅包含应用及其最简依赖,极大提升安全性。
镜像类型大小(约)适用场景
ubuntu:20.0470MB调试、传统服务
alpine:3.185.5MB通用生产环境
gcr.io/distroless/static2MB静态二进制部署

2.3 多阶段构建的原理与Go编译优化实践

多阶段构建通过在单个 Dockerfile 中使用多个 FROM 指令,实现编译环境与运行环境的分离,显著减小最终镜像体积。
编译优化流程
Go 静态编译无需动态依赖,适合多阶段构建。第一阶段使用 golang 镜像编译二进制,第二阶段将产物复制到轻量基础镜像中。
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
上述代码中,CGO_ENABLED=0 禁用 C 交互,生成静态二进制;--from=builder 仅复制可执行文件,避免携带编译工具链。
优化效果对比
构建方式镜像大小启动速度
单阶段~900MB较慢
多阶段~15MB极快

2.4 WORKDIR、COPY与CMD的最佳使用方式

在构建高效且可维护的 Docker 镜像时,合理使用 WORKDIR、COPY 和 CMD 指令至关重要。
目录结构与工作路径管理
始终使用 WORKDIR 显式定义容器内的工作目录,避免依赖默认路径。它会自动创建不存在的目录,并为后续指令提供上下文。
文件复制的最佳实践
# 推荐:分层复制,利用缓存
COPY package*.json ./app/
WORKDIR /app
RUN npm install
COPY src ./src
先复制依赖描述文件并安装,再复制源码,可提升构建缓存命中率。
启动命令的正确设置
使用数组格式定义 CMD,确保信号传递和进程管理正常:
CMD ["node", "server.js"]
避免使用 shell 形式(如 CMD node server.js),以防止 PID 1 行为异常。

2.5 减少镜像体积:静态编译与资源清理策略

为了优化容器镜像大小,静态编译是关键步骤之一。它能将所有依赖库打包进可执行文件,避免在运行时引入额外动态库。
使用静态编译构建轻量二进制
以 Go 语言为例,通过禁用 CGO 可实现纯静态编译:
CGO_ENABLED=0 GOOS=linux go build -a -o app main.go
其中,CGO_ENABLED=0 禁用外部依赖,GOOS=linux 指定目标系统,-a 强制重新编译所有包。
多阶段构建与资源清理
采用多阶段构建仅复制必要文件,并清除缓存:
  1. 第一阶段完成编译
  2. 第二阶段使用 alpine 基础镜像部署
  3. 删除临时文件和包管理缓存
最终镜像不含源码、文档或测试文件,显著降低攻击面并提升启动速度。

第三章:依赖管理与构建效率提升

3.1 Go Module在Docker中的高效缓存技巧

在构建Go应用的Docker镜像时,合理利用层缓存可显著提升构建效率。关键在于分离依赖下载与代码编译阶段。
分阶段构建策略
通过先复制go.mod和go.sum,仅在文件变更时重新下载模块,有效命中缓存。
FROM golang:1.21 AS builder
WORKDIR /app
# 仅当模块文件变更时才重新执行
COPY go.mod go.sum ./
RUN go mod download
# 复制源码并编译
COPY . .
RUN go build -o main ./cmd/main.go
上述Dockerfile中,go mod download被提前执行,使得日常开发中代码变动不会触发依赖重拉取,大幅缩短构建时间。
缓存优化效果对比
构建方式平均耗时缓存利用率
未分离依赖90s低
分阶段缓存30s高

3.2 利用.dockerignore避免上下文污染

在构建Docker镜像时,构建上下文会递归包含所有文件,可能导致敏感文件泄露或镜像体积膨胀。使用 `.dockerignore` 文件可有效排除无关或敏感资源。
常见忽略规则配置

# 忽略本地依赖和日志
node_modules/
logs/
*.log

# 排除开发配置
.env.development
*.swp

# 避免上传测试与CI文件
test/
.ci/
该配置确保只有必要的源码和依赖被纳入构建上下文,减少传输开销并提升安全性。
作用机制说明
  • Docker CLI在发送上下文前读取.dockerignore规则
  • 匹配路径不会被打包进构建上下文
  • 与.gitignore语法兼容,但独立生效
合理配置可显著提升构建效率与安全性。

3.3 构建参数优化与缓存命中率分析

在持续集成环境中,构建参数的合理配置直接影响编译效率与资源利用率。通过调整并发线程数、JVM堆大小及依赖缓存策略,可显著提升构建速度。
关键构建参数调优示例

# 设置Gradle构建参数
./gradlew build \
  --parallel \                  # 启用并行构建
  --build-cache \               # 启用构建缓存
  -Dorg.gradle.jvmargs="-Xmx4g" # 分配最大4GB堆内存
上述参数中,--parallel允许任务级并行执行;--build-cache启用缓存复用机制;-Xmx4g避免频繁GC导致的性能抖动。
缓存命中率监控指标
构建类型缓存命中率平均耗时
首次构建0%280s
增量构建76%65s
数据显示,启用缓存后增量构建耗时降低76%,高命中率显著减少重复计算开销。

第四章:安全与生产环境适配

4.1 非root用户运行容器的安全实践

在容器化部署中,默认以 root 用户运行容器进程会带来严重的安全风险。一旦容器被突破,攻击者将拥有宿主机的高权限访问能力。为降低此类风险,推荐始终以非 root 用户身份运行容器。
创建专用运行用户
可在 Dockerfile 中通过 USER 指令指定非 root 用户:
FROM nginx:alpine
RUN adduser -u 1001 -D appuser && chown -R appuser /usr/share/nginx/html
USER 1001
上述代码创建 UID 为 1001 的非特权用户,并将资源目录归属该用户。最后切换至该用户执行后续命令,确保容器进程以最小权限运行。
强制实施策略
Kubernetes 可通过 Pod Security Context 强制禁止 root 用户:
securityContext:
  runAsNonRoot: true
  runAsUser: 1001
该配置将拒绝所有以 root 身份启动的容器,提升集群整体安全性。

4.2 镜像签名与漏洞扫描集成方案

在持续交付流程中,保障容器镜像的安全性至关重要。通过将镜像签名与漏洞扫描机制集成,可实现从构建到部署的全链路可信验证。
集成架构设计
系统在CI/CD流水线中引入两个关键检查点:镜像构建后自动触发漏洞扫描,扫描通过后由私钥进行数字签名。签名信息与扫描报告一并存入镜像仓库的元数据中。
漏洞扫描自动化
使用Trivy等工具对镜像进行静态分析,检测已知CVE漏洞:
trivy image --exit-code 1 --severity CRITICAL myapp:latest
该命令检测关键级别漏洞,若发现则返回非零退出码,阻断后续签名流程。
签名与验证流程
采用Cosign实现镜像签名:
cosign sign --key cosign.key myregistry/myapp:v1
Kubernetes集群中的准入控制器可通过Cosign公钥验证镜像签名完整性,确保仅运行经过授权和扫描的镜像。

4.3 环境变量配置与敏感信息管理

在现代应用部署中,环境变量是解耦配置与代码的核心手段。通过将数据库地址、API密钥等动态参数外置,可实现多环境无缝切换。
环境变量的基本使用
export DATABASE_URL="postgresql://user:pass@localhost:5432/mydb"
export LOG_LEVEL="debug"
上述命令将关键配置注入运行时环境。应用通过os.Getenv("DATABASE_URL")读取值,避免硬编码带来的安全风险。
敏感信息的安全管理
使用专用工具如 Hashicorp Vault 或 AWS Secrets Manager 可集中管理密钥。推荐流程:
  • 开发环境使用.env文件(配合godotenv等库)
  • 生产环境由CI/CD管道注入加密后的密钥
  • 禁止将敏感数据提交至版本控制系统
环境配置来源密钥处理方式
开发.env 文件明文(本地隔离)
生产Secrets Manager加密注入

4.4 健康检查与启动探针的合理配置

在 Kubernetes 中,合理配置健康检查探针是保障服务稳定性的关键。通过启动探针(startup probe)、就绪探针(readiness probe)和存活探针(liveness probe),可精确控制容器的生命周期状态。
探针类型与适用场景
  • 启动探针:用于初始化时间较长的应用,避免因启动慢导致误杀;
  • 就绪探针:判断容器是否准备好接收流量;
  • 存活探针:检测容器是否运行正常,异常时触发重启。
典型配置示例
startupProbe:
  httpGet:
    path: /health
    port: 8080
  failureThreshold: 30
  periodSeconds: 10
readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 10
上述配置中,startupProbe 允许最多 300 秒(30×10)启动时间,适用于冷启动较慢的服务。而 readinessProbe 在容器启动 5 秒后开始检测,确保依赖加载完成后再接入流量,避免请求失败。

第五章:持续集成与部署的最佳路径

构建高效的流水线设计
现代软件交付依赖于稳定、自动化的CI/CD流程。以GitHub Actions为例,一个典型的流水线包含代码拉取、依赖安装、测试执行和镜像推送四个阶段。以下是一个带有注释的配置示例:

name: CI Pipeline
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm install
      - run: npm test # 运行单元测试,确保质量门禁
      - run: docker build -t myapp:${{ github.sha }} .
环境隔离与发布策略
为避免变更引发服务中断,建议采用蓝绿部署模式。通过Kubernetes配合Ingress控制器,可实现流量切换的精准控制。下表展示了不同环境的资源配置差异:
环境副本数资源限制监控级别
Staging2500m CPU, 1Gi RAM基础日志
Production61000m CPU, 2Gi RAM全链路追踪
  • 每次提交触发自动化测试套件,覆盖率需达到85%以上
  • 使用Docker缓存层加速构建过程,缩短平均构建时间至90秒内
  • 敏感凭证通过Hashicorp Vault注入,杜绝硬编码风险
代码提交 运行测试 构建镜像 部署生产
【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成 本文主要介绍如何将go项目打包成镜像,首先介绍Dockerfile常用命令介绍,然后介绍使用工具goctl用于生成Dockerfile,还可以根据需求自定义指令内容,最后讲解如何将go-blog项目打包成镜像,以及如何运行等 阅读详情

相关推荐

利用Dockerfile快速搭建golang语言开发环境(基础版)

利用Dockerfile快速搭建golang开发环境(基础版)

JAVA_MF的博客 1783

docker(三、dockerfile)

dockerfile

youaremyalllove的博客 883

【Docker】Golang工程的Dockerfile:快速入门与最佳实践指南

【Docker】Golang工程的Dockerfile:快速入门与最佳实践指南 一文手把手带你搞懂golang使用DockerFile正确食用指南!

寸铁的博客 3518

go后端Dockerfile范例

RUN pwdRUN lsRUN ls。

weixin_44289548的博客 287

Dockerfile构建go环境

接下来我们就来做一个工作实践,搭建一个go环境,然后尝试使用Dockerfile的方式,构造一个镜像。 1.1 项目描述 beego官方网站:https://beego.me/ 我们借助于beego的简介,部署一个go项目,然后运行起来。 1.2 手工部署go语言环境 需求: 基于docker镜像,手工部署go项目环境 方案分析: 1、docker环境部署 2、go环境部署 3、go项目部署 4、...

Trig_Von的博客 2505

最简单的Go Dockerfile编写姿势,没有之一!

1. Dockerfile一些额外注意点 选择最简单的镜像 比如alpine,整个镜像5M左右 设置镜像时区 RUN apk add --no-cache tzdata ENV TZ Asia/Shanghai 2. 多阶段构建 第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机 第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像 3. 完整Dockerfile编写过程 首先安装 goctl 工具 GO111MODULE=on GOPROXY=https://goproxy.cn/

我心飞翔 730

Dockerfile编写避坑大全,Go开发者必须掌握的7个关键点

掌握Go Docker配置关键技巧,避免常见构建陷阱。本文详解Dockerfile优化、多阶段构建、镜像瘦身等7个核心要点,提升Go应用容器化效率与安全性,适用于微服务部署与CI/CD流程,值得收藏。

GatherLume的博客 802

Docker Golang 开发环境搭建指南_docker golang开发环境

转存中…(img-9rhM9rDw-1712866719324)]

2401_84247423的博客 1979

如何优雅的编写Dockerfile

优雅的编写Dockerfile 一、语法 一条Dockerfile的命令,对应一个bulid的step,自上而下按顺序构建: 首先拉取父镜像,留存一个镜像ID 以上一步的镜像启动一个中间态容器,记录容器ID,执行step;执行完毕,删除这个ID的中间态容器,留存一个新的镜像ID 每一次step执行,都会生成一个层的镜像,每层镜像会有唯一的 Hash 码,是增量式的。 二、常见样例 FROM ubuntu:16.04 RUN apt-get update RUN apt-get install -y

weixin_43953700的博客 2万+

PLC编程标准之争:IEC61131与IEC61499核心区别与选型指南

在工业自动化领域,PLC编程长期依赖IEC61131标准,它定义了梯形图、结构化文本等语言,通过周期扫描机制保证确定性执行。然而,随着工业4.0和分布式控制场景的兴起,IEC61499以事件驱动模型打破传统范式,让功能块能跨设备协同,实现更灵活的柔性产线和模块化系统。理解两者在程序结构、数据交互、部署方式和实时性上的差异,是选型与工程落地的关键。本文从基础概念出发,剖析执行模型与架构演进,结合一线调试经验,帮助工程师在传统PLC与下一代标准之间做出理性决策。

weixin_27014595的博客 270

cadence—virtuosoic617的使用技巧收集区

cadence使用

qq_33599939的博客 3万+

ant-design-vue Select 组件完全指南:API、事件、模式与源码级实战解析

本文基于 ant-design-vue 官方文档 [Select 组件文档](https://link.gitcode.com/i/ecc15c3b1ea502645690ffc90f0b8613) 展开,系统讲解下拉选择器(Select)的完整 API 体系——从基础用法、全部 props/events/methods 参数表,到 multiple、tags、搜索、虚拟滚动、自定义下拉等高频实战

gitblog_00769的博客 1054

基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

项目中使用到了ws2812灯带,作为产品的外观显示灯,经过开发之后,整理一下,仅供大家参考。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050 LED灯珠相同, 每个元件即为一个像素点。 像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素

weixin_43608153的博客 9214

最简单的Go Dockerfile编写姿势

选择最简单的镜像比如alpine,整个镜像5M左右设置镜像时区 2. 多阶段构建 第一阶段构建否则构建出可执行文件,确保构建过程独立于宿主机 第二阶段将第一阶段的输出作为输入,构建出最终的极简镜像 3. 完整Dockerfile编写过程 首先安装 工具在 项目下创建一个 服务文件结构如下: 在 目录下一键生成 内容如下: 在 目录下 镜像查看镜像可以看出镜像大小约为18M。启动服务测试服务 4. 总结 工具极大简化了 文件的编写,提供了开箱即用的最佳实践,并且支持了

码农印象 1553

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

yingtu666的博客 5158

Android13配置selinux让system应用可读sys,proc,SN号

Android13预置的system应用,需要读/sys, /proc目录,读(SN)serial number号, 需要修改selinux配置,否则会报avc错.其修改方法会比Android11复杂一些.。

zmlovelx(帅得不敢出门 程序员群31843264) 2655

Golang项目通用Dockerfile编写

golang go path和go mod的区别 go path 所有运行的go文件都要放在gopath文件下, 因为下载下来的包都在这里目录下可以引用 go mod 他有一套引用机制 无论你的go文件在哪里 都可以引用包 go path方式 #编译镜像 FROM golang:latest as builder MAINTAINER TigerwolfC@***.com.cn WORKDI...

TigerwolfC的博客 2203

C语言 在合并编译 ( 多.c文件 ) 情况下 实现 linked list ( 链表 ) 教程 . 更新ing

写在前面  依旧是参考借鉴了 浙江大学 温老师 的视频教程,很不错,在中国大学MOOC上,强力推荐!  虽说有借鉴,但是能保证的是每一行代码都是我自己经过理解后手敲出来的,所以才来做了这部分的教程。  最后,带 * 字符是我个人觉得可以添加的功能,按理来讲是可以不看的,而且大概率是可以有更好的改进的。  PS: 文章还在更新,如果文字蓝了(有超链接),说明写完了,如果没蓝,说明我在开军舰.jpg 源代码:  这里→源代码. 第一步:前置工作  先说一下每一篇都会出现 main 函数的,stage1 只是给没

weixin_47287635的博客 527

手把手教你玩转Dockerfile:从入门到实战(附避坑指南)

越小越好(多用多阶段构建)越明确越好(固定版本号)越安全越好(非root用户运行)官方最佳实践文档:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/Dive镜像分析工具:https://github.com/wagoodman/diveHadolint语法检查:https://github.com/hadolint/hadolint下次看到复杂的Dockerfile时,你会笑着对自己说:“就这。

swiftcoder1的博客 625

概念解析 | 事件相机的原理 (含仿真代码)

在我们熟悉的世界里,传统相机就像一个勤勉的绘画师,每隔固定的时间就为我们勾勒出一幅完整的画面。但是,大自然中有太多瞬息万变的精彩场景,这种"定时绘画"的方式往往难以捕捉。于是,一种全新的"观察者"应运而生 -事件相机(Event Camera)。事件相机,就像是一群极其敏感的"像素哨兵",它们不再按部就班地等待指令,而是主动感知周围的变化,只有在光线强度发生显著变化时才会发出信号。这种革命性的设计,让事件相机拥有了传统相机难以企及的优势:超高的时间分辨率、极低的延迟、宽广的动态范围,以及出色的能效比。

NLOS的博客 1423

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

编写 Go 项目的 Dockerfile 文件及生成 Docker 镜像

本文介绍了使用Docker容器化Go项目的完整流程。主要内容包括:如何编写Dockerfile文件(指定golang基础镜像、设置环境变量、配置工作目录等);通过docker build命令构建镜像;使用docker run运行容器(端口映射);以及优化建议(多阶段构建减小镜像体积、利用缓存加速构建)。通过Docker容器化可以简化Go应用在不同环境的部署,提高开发效率。文章还提供了项目结构示例和具体操作命令,帮助开发者快速掌握容器化部署技巧。

qq_33665793的博客 788

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Dockerfile构建Go环境

一、手工部署go环境 第一步:基于ubuntu镜像创建容器,并进入容器; $ docker run -itd --name ubuntu-go ubuntu $ docker exec -it ubuntu-go /bin/bash 第二步:配置国内源; root@xxx:~# sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/ap...

zhongliwen1981的专栏 5829

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

(最新2020)Golang 使用Dockerfile 打包部署到 docker

部署前提: 宿主机已经安装好了 go 配置环境 因为 我是linux 编译的golang代码 不是 已经编译好的二进制部署的 宿主机已经安装好了docker FROM golang:alpine # 为我们的镜像设置必要的环境变量 ENV GO111MODULE=on \ CGO_ENABLED=0 \ GOOS=linux \ GOARCH=amd64 \ GO...

weixin_44042863的博客 1万+

使用dockerfile制作Go实例镜像(实例)

编写go文件 ubuntu@ubuntu18:/tmp/dockertmp$ mkdir go_docker ubuntu@ubuntu18:/tmp/dockertmp$ cd go_docker/ ubuntu@ubuntu18:/tmp/dockertmp/go_docker$ vim main.go ubuntu@ubuntu18:/tmp/dockertmp/go_docker$ vim...

偷一个月亮 1816

Ubuntu配置golang gin的环境以及相应的Dockerfile

apt-get update -y apt-get install -y wget wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin apt-get ins...

与数据和AI有关的东西 1091
上一篇: Go项目构建提速秘籍:Makefile与Bazel如何选择(性能实测)
下一篇: Go语言内存管理深度解析(GC调优秘籍首次公开)
CompiTide
博客等级 码龄1年 174粉丝 2175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值