第二十二: go与k8s、docker相关编写dockerfile

news2025/4/13 7:33:32

实战演示k8s部署go服务,实现滚动更新、重新创建、蓝绿部署、金丝雀发布-CSDN博客

go 编写k8s命令:

怎么在go语言中编写k8s命令 • Worktile社区

k8s中如何使用go

在K8s编程中如何使用Go-阿里云开发者社区

go build - o : -o:指定输出文件的名称和路径。例如,go build -o myapp会将编译后的可执行文件命名为myapp

Go 常用命令介绍 - 贾维斯Echo - 博客园

Mac 上搭建k8s-CSDN博客

编写dockerFile 文件:

如何使用Docker部署Go Web应用 | 李文周的博客

如何使用Docker部署Go Web应用的实现_docker_脚本之家

使用 docker 轻松部署你的 Go 项目-腾讯云开发者社区-腾讯云

Docker Compose 项目打包部署-腾讯云开发者社区-腾讯云

docker-compose教程(安装,使用, 快速入门)-CSDN博客

【实战篇】docker-compose部署go项目 - 随风落木 - 博客园

docker-compose自动部署go项目全流程,本地到镜像仓库到服务器,踩坑笔记 - cccq - 博客园

安装docker 和 docker compose :

docker-compose管理多个服务_docker-compose 启动多个服务-CSDN博客

Docker compose部署Golang服务_docker-compose golang-CSDN博客

为了在 Kubernetes 中运行你的 Go 应用,你需要将其打包进一个 Docker 容器中。创建一个 Dockerfile

# 使用官方的 Go 语言基础镜像
FROM golang:1.17 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go
 
# 使用轻量级的基础镜像运行应用
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
ENTRYPOINT ["./myapp"]


第二种方式详解:

Dockerfile复制代码
# 使用官方的Golang镜像作为基础镜像  
FROM golang:1.17-alpine AS build-env
# 设置工作目录  
WORKDIR /app  
# 将当前目录下的所有文件复制到容器中的/app目录下  
COPY . .  
# 安装依赖(如果有的话)  
# RUN go mod tidy  
# 编译Go应用程序  
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp .  
# 使用一个轻量级的Alpine Linux镜像来运行编译好的程序  
FROM alpine:latest  
# 将编译好的程序从build-env阶段复制到当前镜像  
COPY --from=build-env /app/myapp /usr/local/bin/myapp  
# 设置容器启动时运行的命令  
ENTRYPOINT ["/usr/local/bin/myapp"]  
# 暴露端口  
EXPOSE 8080



第三种方式:

FROM golang:1.13.5-alpine3.10 AS builder

WORKDIR /build
RUN adduser -u 10001 -D app-runner

ENV GOPROXY https://goproxy.cn
COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -a -o your-application .

FROM alpine:3.10 AS final

WORKDIR /app
COPY --from=builder /build/your-application /app/
#COPY --from=builder /build/config /app/config
COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

USER app-runner
ENTRYPOINT ["/app/your-application"]


golang 打包的几种镜像效率对比:

golang学习总结(四)-程序编译_from golang:alpine-CSDN博客

机遇屋-golang 打包到docker运行,最小镜像

构建docer 镜像:

docker build -t my-go-app .

4. 推送 Docker 镜像到容器仓库(如 Docker Hub)

docker tag my-go-app yourusername/my-go-app:latest
docker push yourusername/my-go-app:latest

5. 在 Kubernetes 中部署应用

首先,确保你的 Kubernetes 集群已配置并可以访问。然后,创建一个 Deployment 来运行你的应用:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-app-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: go-app
  template:
    metadata:
      labels:
        app: go-app
    spec:
      containers:
      - name: go-app-container
        image: yourusername/my-go-app:latest
        ports:
        - containerPort: 8080

应用这个配置:

kubectl apply -f deployment.yaml

6. 暴露服务(可选)

如果你想要从集群外部访问你的应用,可以创建一个 Service:

apiVersion: v1
kind: Service
metadata:
  name: go-app-service
spec:
  type: LoadBalancer  # 或者 NodePort, ClusterIP 等类型,取决于你的需求和 Kubernetes 集群的配置。
  ports:
  - port: 8080       # 服务端口号。这应该与 Deployment 中的容器端口号相匹配。
    targetPort: 8080 # Pod 中的容器端口号。这应该与 Deployment 中的容器端口号相匹配。
  selector:          # 选择器用于确定哪些 Pod 应该被包含在 Service 中。这应该与 Deployment 中的标签选择器相匹配。
    app: go-app      # 选择器中的标签值应该与 Deployment 中的 Pod 标签相匹配。

应用这个配置:

kubectl apply -f service.yaml

现在,你应该可以通过 Kubernetes 的 LoadBalancer IP 或 NodePort(取决于你选择的服务类型)来访问你的 Go 应用了。使用 kubectl get svc 查看服务详情。

以上步骤涵盖了在 Kubernetes 中使用 Go 语言编写、构建、部署和运行一个简单应用的完整流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.net Core 和 .net freamwork 调用 deepseek api 使用流输出文本(对话补全)

.net Core 调用 deepseek api 使用流输出文本 简下面直接上代码(.net core):最后再贴一个 .net Freamwork 4 可以用的代码TLS 的代码至关重要的:(下面这个) 简 在官网里面有许多的案例:我们通过…

springcloud整理

问题1.服务拆分后如何进行服务之间的调用 我们该如何跨服务调用,准确的说,如何在cart-service中获取item-service服务中的提供的商品数据呢? 解决办法:Spring给我们提供了一个RestTemplate的API,可以方便的实现Http请…

04-算法打卡-数组-二分查找-leetcode(69)-第四天

1 题目地址 69. x 的平方根 - 力扣(LeetCode)69. x 的平方根 - 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内…

[Windows] 字体渲染 mactype v2025.4.11

[Windows] 字体渲染 mactype 链接:https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可变字体支持已到来。 本版本将可变字体支持扩展到所有 GDI 应用程序。 所有 win32 程序中的字体,如 Noto Sans、Se…

VSCode CMake调试CPP程序

文章目录 1 安装C与CMake插件2 配置CMakeLists.txt3 使用CMake编译调试3.1 编译3.2 调试 4 自定义构建调试参考 1 安装C与CMake插件 C插件 CMake插件 2 配置CMakeLists.txt 编写测试程序 #include<iostream>int main(int argc, char const *argv[]) {int a 1, b 2;i…

Halo 设置 GitHub - OAuth2 认证指南

在当今数字化时代&#xff0c;用户认证的便捷性和安全性愈发重要。对于使用 Halo 搭建个人博客或网站的开发者而言&#xff0c;引入 GitHub - OAuth2 认证能够极大地提升用户登录体验。今天&#xff0c;我们就来详细探讨一下如何在 Halo 中设置 GitHub - OAuth2 认证。 一、为…

【unity游戏开发——Animator动画】Animator动画状态机复用——重写动画控制器 Animator Override Controller

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——Animator动画】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、状态机复用是什么&#xff1f;二、实战专栏推荐完结 一、状态机复…

C语言--汉诺塔问题

汉诺塔问题是一个典型的递归问题。 递归问题的基本思想&#xff1a;将问题逐步化简为相同思路但是规模更小的问题&#xff0c;直到问题可以直接解决 递归的关键在于基准情形和递归步骤&#xff0c;基准情形也就是退出条件&#xff0c;递归步骤也就是把问题简化为子问题的过程。…

301.找出3位偶数

2094. 找出 3 位偶数 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> resnew ArrayList<>();List<Integer> linew ArrayList<>();public int[] findEvenNumbers(int[] digits) {Arrays.sort(digits);boolean[] numsnew boolea…

使用Python从零开始构建端到端文本到图像 Transformer大模型

简介&#xff1a;通过特征向量从文本生成图像 回顾&#xff1a;多模态 Transformer 在使用Python从零实现一个端到端多模态 Transformer大模型中&#xff0c;我们调整了字符级 Transformer 以处理图像&#xff08;通过 ResNet 特征&#xff09;和文本提示&#xff0c;用于视觉…

comfyui点击执行没反应一例

以前只遇到过执行工作流时出错的情况&#xff0c;从没试过说点了执行后一点反应都没有的情况。 今天下载 蓝色多脑盒《一键同时换头、换脸、发型、发色之双pulid技巧》分享的工作&#xff0c;第一次发现点击执行没反应。 发现左下角的地方连接错乱了。 更正连接后工作流能正常…

01-libVLC的视频播放器:环境搭建以及介绍

项目展示项目播放器 VLC简介VLC媒体播放器(VideoLAN Client)是一款开源、跨平台的自由多媒体播放器,由VideoLAN项目开发。它支持众多音频与视频格式(如MPEG-2、MPEG-4、H.264、MKV、WebM、WMV、MP3等),以及DVD、VCD和各种流媒体协议。 VLC的特点跨平台支持:Windows、mac…

用css画一条弧线

ui里有一条弧线&#xff0c;现在用css实现 关键代码 border-bottom-left-radius: 100% 7px 两个参数分别代表横向和纵向的深度border-bottom-right-radius: 100% 7px

FPGA上实现SD卡连续多块读的命令

在FPGA上实现SD卡连续多块读的命令 CMD17命令一次只能读取1个块 CMD18命令一次可以连续读取多个块&#xff0c;直到停止命令CMD12 CMD18命令读的块数程序可任意设置 目录 前言 一、SD卡多块读命令CMD18 二、停止读命令CMD12 三、SD卡初始化SD卡连续块读操作的verilog代码 …

从原理图到成品:PCBA设计的常见陷阱与规避方法

在电子设计领域&#xff0c;从原理图到PCBA&#xff08;Printed Circuit Board Assembly&#xff09;的转换过程中&#xff0c;布局布线是决定电路性能的关键环节。然而&#xff0c;许多工程师在实际操作中容易陷入一些常见误区&#xff0c;导致信号完整性、EMI&#xff08;电磁…

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点&#xff0c;本教程将通过对比分析、代码示例和场景说明&#xff0c;帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…

【项目管理】第11章 项目成本管理-- 知识点整理

相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 ​ ​ (二)知识笔记​ 第11章 项目成本管理 ​ 1.管理基础…

初学STM32之编码器测速以及测频法的实现

资料来着江协科技 这篇是编码器测速&#xff0c;江科大的源码在测速的时候&#xff0c;定时器TIM2是一直在跑的&#xff0c;不受其它控的&#xff0c;它就一直隔1S读一次CNT的值。它也不管是否有输入信号。源码程序修改一下是可以实现对PWM信号以测频法的方式读取。 笔者稍微改…

Linux 内核知识体系[1]

1 Linux内核知识体系 2.Linux内核学习路线 2.1基础知识准备 操作系统基础&#xff1a;了解操作系统的概念和基本原理&#xff0c;包括进程管理、内存管理、文件系统、输入输出等。 书籍&#xff1a;《操作系统&#xff1a;设计与实现》&#xff08;Andrew S. Tanenbaum&…

Mac 下载 PicGo 的踩坑指南

Mac 下载 PicGo 的踩坑指南 一、安装问题 下载地址&#xff1a;https://github.com/Molunerfinn/PicGo/releases 下载之后直接安装即可&#xff0c;此时打开会报错&#xff1a;Picgo.app 文件已损坏&#xff0c;您应该将它移到废纸篓。 这是因为 macOS 为了保护用户不受恶意…