通过nerdctl+buildctl编译发布go程序docker镜像

news2024/10/6 10:42:51

1 nerdctl安装

下载:

 wget -c https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-full-1.7.6-linux-amd64.tar.gz

解压:

tar -zxf nerdctl-full-1.7.6-linux-amd64.tar.gz -C /usr/local/nerdctl

配置:

/usr/local/nerdctl/bin

vi /etc/profile
source /etc/profile

2 buildkit安装

下载:

wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz

解压:

tar -xf buildkit-v0.13.2.linux-amd64.tar.gz -C /usr/local/buildkit

配置:

/usr/local/buildkit/bin

vi /etc/profile
source /etc/profile

服务配置:

cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target

[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd

[Install]
WantedBy=multi-user.target
EOF
# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd

需要特俗网络配置代理:

vi  /usr/lib/systemd/system/buildkitd.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
sudo systemctl daemon-reload
sudo systemctl restart buildkit

3 开始配置docker

项目根目录下Dockerfile文件

#使用官方的Golang映像创建构建工件。
FROM golang:1.21

# 设置代理
ENV HTTP_PROXY=http://127.0.0.1:10809
ENV HTTPS_PROXY=http://127.0.0.1:10809
ENV NO_PROXY=localhost,127.0.0.1

# 在容器内设置当前工作目录
WORKDIR /app

# 复制go mod和sum文件
COPY go.mod go.sum ./

# 下载所有依赖项。依赖项将被缓存。装好就走。Sum文件不会被更改
RUN go mod download

# 将源代码从当前目录复制到容器内的工作目录
COPY . .

# 构建Go应用程序
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

# 将端口8080暴露给外部世界
EXPOSE 8080

# 命令运行可执行文件
CMD ["./main"]

4 编译

nerdctl build -t leellun/zhiqu ./ 

执行: 

[root@k8s-master01 zhiqu]# nerdctl --debug build -t leellun/zhiqu ./
DEBU[0000] Choosing the buildkit host "buildkit-default/buildkitd.sock", candidates=[buildkit-default/buildkitd.sock buildkit/buildkitd.sock] (in "/run/") 
DEBU[0000] Choosing the buildkit host "buildkit/buildkitd.sock", candidates=[buildkit-default/buildkitd.sock buildkit/buildkitd.sock] (in "/run/") 
DEBU[0000] Chosen buildkit host "unix:///run/buildkit/buildkitd.sock" 
DEBU[0000] worker labels: map[org.mobyproject.buildkit.worker.executor:oci org.mobyproject.buildkit.worker.hostname:k8s-master01 org.mobyproject.buildkit.worker.network:host org.mobyproject.buildkit.worker.oci.process-mode:sandbox org.mobyproject.buildkit.worker.selinux.enabled:false org.mobyproject.buildkit.worker.snapshotter:native] 
DEBU[0000] running /usr/local/buildkit/bin/buildctl [--addr=unix:///run/buildkit/buildkitd.sock build --progress=auto --frontend=dockerfile.v0 --local=context=./ --output=type=docker,name=docker.io/leellun/zhiqu:latest --local=dockerfile=/root/zhiqu --opt=filename=Dockerfile] 
[+] Building 222.2s (11/11)                                                                                                                                                                                                              
[+] Building 222.4s (11/11) FINISHED                                                                                                                                                                                                     
 => [internal] load build definition from Dockerfile                                                                                                                                                                                0.0s
 => => transferring dockerfile: 686B                                                                                                                                                                                                0.0s
 => [internal] load metadata for docker.io/library/golang:1.21                                                                                                                                                                      2.5s
 => [internal] load .dockerignore                                                                                                                                                                                                   0.0s
 => => transferring context: 2B                                                                                                                                                                                                     0.0s
 => [1/6] FROM docker.io/library/golang:1.21@sha256:a8edec58ba598e2f1259f4ec4ca1b06358468214225e73d7c841ab0980c12367                                                                                                                0.0s
 => => resolve docker.io/library/golang:1.21@sha256:a8edec58ba598e2f1259f4ec4ca1b06358468214225e73d7c841ab0980c12367                                                                                                                0.0s
 => [internal] load build context                                                                                                                                                                                                   0.0s
 => => transferring context: 87.11kB                                                                                                                                                                                                0.0s
 => CACHED [2/6] WORKDIR /app                                                                                                                                                                                                       0.0s
 => [3/6] COPY go.mod go.sum ./                                                                                                                                                                                                     3.6s
 => [4/6] RUN go mod download                                                                                                                                                                                                     115.1s
 => [5/6] COPY . .                                                                                                                                                                                                                  6.0s
 => [6/6] RUN CGO_ENABLED=0 GOOS=linux go build -o main .                                                                                                                                                                          43.7s
 => exporting to docker image format                                                                                                                                                                                               51.0s
 => => exporting layers                                                                                                                                                                                                            32.6s
 => => exporting manifest sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2                                                                                                                                   0.0s
 => => exporting config sha256:4a200525a4604ce63db8fa0abe08a45886a7f4ea96f86ae02819401d3091083b                                                                                                                                     0.0s
 => => sending tarball                                                                                                                                                                                                             18.3s
Loaded image: docker.io/leellun/zhiqu:latest

 

5. 将镜像推送到容器镜像仓库

登录 Docker Hub:

[root@k8s-master01 zhiqu]# nerdctl login
Enter Username: leellun
Enter Password: 
WARNING: Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

 给镜像打标签:

nerdctl tag leellun/zhiqu:latest your_dockerhub_username/zhiqu:latest

 推送镜像:

nerdctl push your_dockerhub_username/zhiqu:latest

由于我的dockerhub的用户名就是leellun,就不用打标签了 

[root@k8s-master01 zhiqu]# nerdctl push leellun/zhiqu:latest
INFO[0000] pushing as a reduced-platform image (application/vnd.docker.distribution.manifest.v2+json, sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2) 
manifest-sha256:a2b6adb815f33f4a93e4c5ea19ecdfa4c34e56365c9339d2839adf260abcfce2: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:4a200525a4604ce63db8fa0abe08a45886a7f4ea96f86ae02819401d3091083b:   done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 198.9s                                                                   total:  7.3 Ki (37.0 B/s) 

6 k8s配置

在项目根目录下创建 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-app
  template:
    metadata:
      labels:
        app: go-app
    spec:
      containers:
      - name: go-app
        image: yourusername/go-app:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: go-app-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: go-app

7 部署到 Kubernetes 集群

kubectl apply -f deployment.yaml

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

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

相关文章

6月报名 | 海克斯康Actran风机类气动噪声分析培训

您好&#xff01;感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加海克斯康Actran风机类气动噪声分析培训&#xff0c;特邀海克斯康原厂讲师将以实操为基础&#xff0c;结合真实案例&#xff0c;手把手帮您解锁噪声仿真关键技术。 活动主题&#xff1a; 海…

【架构之路】微服务中常用的几种通信方式

2024年&#xff0c;计算机相关专业还值得选择吗&#xff1f; 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 引言 微服务架构由于其灵活性、高可扩展性和易维护性&am…

mysql打开远程访问

这里写目录标题 1.使用navicat进入命令控制板,进入use mysql;2.查询用户表3.更新user表中root用户域属性&#xff0c;%表示允许外部访问4.执行以上语句之后再执行&#xff0c;FLUSH PRIVILEGES;5. 执行授权语句 1.使用navicat进入命令控制板,进入use mysql; use mysql;2.查询用…

NOSQL -- MOGODB

Mogodb简介: 是一个开源的, 高性能, 无模式的文档型数据库. NoSql数据库产品当中的一种, 也是最像关系型数据库的非关系型数据库 使用场景: 针对不同的应用场景, 以及其对应的修改对应数据的频率, 我们可以以此选择需要哪一种类型的数据库 Mongo的使用: 启动: 在解压完成之后…

动手学操作系统(六、获取物理内存容量)

动手学操作系统&#xff08;六、获取物理内存容量&#xff09; 在上一节中&#xff0c;我们介绍了保护模式和实模式的区别&#xff0c;保护模式的最大特点是“大”&#xff0c;“大”是指寻址空间大&#xff0c;在进入保护模式之后&#xff0c;我们还将要接触虚拟内存、内存管…

基于pytorch实现的DenseUnet医学图像分割(腹部多脏器)

1、前言 本章将介绍将densenet的主干网络引入unet中 官方实现的代码&#xff1a;kits19-challenge/network at master nitsaick/kits19-challenge (github.com) 本章实现的项目目录如下&#xff1a; 主要代码有train、evaluate、predict脚本 2、代码介绍 数据预处理脚本 数据…

全能型施耐德可编程控制器M241介绍

施耐德M241是一款通信强大、定位控制、丰富扩展于一身的全能型可编程控制器&#xff0c;适用于具有速度控制和位置控制功能的高性能一体型设备。其内置以太网通信端口&#xff0c;可以提供FTP和网络服务器功能&#xff0c;能够更为便捷地整合到控制系统架构中&#xff0c;通过智…

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法&#xff0c;它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特&#xff0c;强大&#xff0c;而且使用更为方便&#xff0c;目前检测少&#xff0c;强烈推荐&#xff01;&#xff01;&a…

Spark Streaming 概述及入门案例

一、介绍 1. 不同的数据处理 从数据处理的方式&#xff1a; 流式数据处理(Streaming)批量数据处理(Batch) 从数据处理的延迟&#xff1a; 实时数据处理(毫秒级别)离线数据处理(小时或天级别) 2. 简介 SparkStreaming 是一个准实时(秒或分钟级别)、微批量的数据处理框架Spa…

了解侧信道攻击基础知识

人们通常认为特洛伊木马、恶意软件和其他形式的黑客攻击等漏洞是的威胁&#xff1b;然而&#xff0c;从 EE 的角度来看&#xff0c;安全性具有全新的含义。  事实上&#xff0c;许多的安全威胁都是基于硬件的&#xff0c;攻击者可以直接从运行我们的安全加密软件的硬件中窃取…

根据mooc 数据库旧代码 实现剥离数据库链接单独成类,并进行测试

数据源详情链接&#xff0c;SQLserver 2019 代码复制粘贴可产生数据 数据库JDBC 查询sqlserver 2019 利用模板实现输入查询-CSDN博客 效果如下 剥离的链接模块 Slinkv2.java package SQLadd;import java.sql.Connection; import java.sql.DriverManager; import java.sql.Re…

CentOS-内网搭建FTP-Server

一、镜像选择 1、 Centos-everting或者DVD 2、7.5 7.6 7.9 均可 二、安装步骤 1、其余步骤和普通安装一致。 2、最重要的一步为“软件选择” 1、勾选FTP、文件以及存储服务器、性能以及开发工具。 三、FTPServer搭建 1、关闭防火墙 systemctl stop firewalld or 通过21和20…

PS教程系统17

橡皮擦工具 主要配合画笔工具来使用 选择画笔工具新建图层试验擦除线条 如果直接在背景图片上进行擦除 会有背景颜色补充 背景橡皮擦 将其白色背景擦除掉shift相关键&#xff0c;进行工作区域切换吸取样点一次采样、两次采样连续、不连续等功能 在进行涂擦的过程一…

为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

通过ClangFormat进行格式设置时出现错误

1、打开工具->选项 2、文本编辑器->C/C->格式设置->启动ClangFormat支持(去掉勾选)

六种图算法的python实现

六种图算法的python实现 1. Prim 算法 基本原理 Prim算法是一种求解最小生成树的贪心算法。所谓最小生成树&#xff0c;就是对于给定的连通图&#xff0c;找到一棵包含所有顶点的树&#xff0c;且树上所有边的权重之和最小。Prim算法从一个顶点开始&#xff0c;每次选择与当…

[CUDA编程] cuda graph优化心得

CUDA Graph 1. cuda graph的使用场景 cuda graph在一个kernel要多次执行&#xff0c;且每次只更改kernel 参数或者不更改参数时使用效果更加&#xff1b;但是如果将graph替换已有的kernel组合&#xff0c;且没有重复执行&#xff0c;感觉效率不是很高反而低于原始的kernel调用…

使用fvm切换flutter版本

切换flutter版本 下载fvm 1、dart pub global activate fvm dart下载fvm 2、warning中获取下载本地的地址 3、添加用户变量path&#xff1a; 下载地址 终端查看fvm版本 fvm --version 4、指定fvm文件缓存地址 fvm config --cache-path C:\src\fvm&#xff08;自定义地址&…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟&#xff0c;全国各地的消费者通过网络在线上购物的频率越来越高&#xff0c;为此&#xff0c;多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台&#xff0c;开设自己的店铺。 图片来源&#xff1a;unspl…

【Ardiuno】实验使用ESP32单片机连接Wifi(图文)

ESP32单片机最为精华和有特色的地方当然是wifi连接&#xff0c;这里我们就写程序实验一下适使用ESP32主板连接wifi&#xff0c;为了简化实验我们这里只做了连接部分&#xff0c;其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可&#xff0c;因此电路板上…