当前位置: 首页 > news >正文

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

实战演示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 语言编写、构建、部署和运行一个简单应用的完整流程。

相关文章:

  • 策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?
  • Java中的static都能用来修饰什么?
  • 【强化学习-蘑菇书-2】通过具体的例子来学习如何与 Gym 库进行交互——小车上山(MountainCar-v0)
  • idea开发工具多账号使用拉取代码报错问题
  • 探秘 HTML5 Geolocation:精准定位用户位置,拓展网页交互边界
  • Redis-数据类型
  • AF3 ProteinDataset类的get_anchor_ind方法解读
  • 基于生成对抗网络(GAN)的手写数字生成实践
  • 了解SpringAOP
  • 【React】React-toolkit
  • java设计模式-组合模式
  • 路由交换网络专题 | 第二章 | RIP | OSPF | 路由聚合 | 路由过滤 | 静默接口
  • Linux上位机开发实践(底板设计)
  • matlab与dsp28335联调
  • MySQL索引介绍
  • 什么是VLA
  • 【数据结构】HashMap源码 —— 简单介绍
  • 人工智能之数学基础:奇异值分解SVD
  • JAVA SDK通过proxy对接google: GCS/FCM
  • 实测解析:FP7208 在汽车照明、摄影照明、教育照明以及太阳能照明等不同市场领域的典型应用参数解析和案例分析
  • 怎么样评价网站做的好坏/郑州网站优化推广
  • 网站样式模板/seo优化靠谱吗
  • 婚车网站模版/看网站搜什么关键词
  • 网站备案没有固定电话/西安seo王尘宇
  • 怎么把在微企点做响应式网站/私域流量运营管理
  • 如何实现输入域名访问网站首页/重庆seo和网络推广