[转帖]nerdctl+buildkitd构建容器镜像

nerdctl,buildkitd,构建,容器,镜像 · 浏览次数 : 0

小编点评

**搭建nerdctl+buildkitd环境:** **步骤 1:下载并安装必要的软件** * 下载并安装 `nerdctl`:wget https://github.com/containerd/nerdctl/releases/download/v0.22.0/nerdctl-0.22.0-linux-amd64.tar.gztar -zxvf nerdctl-0.22.0-linux-amd64.tar.gz * 下载并安装 `buildkitd`:wget https://github.com/moby/buildkit/releases/download/v0.10.3/buildkit-v0.10.3.linux-amd64.tar.gztar -zxvf buildkit-v0.10.3.linux-amd64.tar.gzcp -a bin/buildkitd bin/buildctl /usr/local/bin/ **步骤 2:配置 `buildkitd` 和 `nerdctl`** 1. 创建一个名为 `buildkitd.service` 的文件,内容如下: ``` [Unit] Description=BuildKitRequires=buildkit.socket After=buildkit.socket [Service] ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true [Install] WantedBy=multi-user.target ``` 2. 创建一个名为 `buildkitd.socket` 的文件,内容如下: ``` ListenStream=%t/buildkit/buildkitd.sock [Install] WantedBy=sockets.target ``` 3. 创建一个名为 `nerdctl.service` 的文件,内容如下: ``` [Unit] Description=BuildKitDocumentation=https://github.com/moby/buildkit [Service] ExecStart=/usr/local/bin/nerdctl ``` **步骤 3:配置 `nerdctl`** 1. 创建一个名为 `nerdctl.toml` 的文件,内容如下: ``` namespace = "k8s.io" ``` **步骤 4:信任 Harbor 自签名证书** 1. 在 Harbor 服务器上,创建一个名为 `ca.crt` 的文件,内容是 Harbor 的证书。 2. 在 `/etc/containerd/certs.d/` 目录下创建文件 `harbor.wyh.net.crt`,并将 Harbor 的证书内容写入该文件。 3. 在 `/etc/containerd/certs.d/harbor.wyh.net.key` 文件中创建文件 `harbor.wyh.net.key`,并将 Harbor 的公钥内容写入该文件。 4. 测试是否可以登录 Harbor 服务:`nerdctl login harbor.wyh.net` **步骤 5:设置 `k8s.io` namespace** 1. 创建一个名为 `k8s.io` 的文件,内容如下: ``` cat <<EOF >/etc/nerdctl/nerdctl.tomlnamespace = \"k8s.io\"EOF ``` **步骤 6:分层构建镜像** 1. 创建一个 `docker-compose.yml` 文件,内容如下: ```yaml version: "3.8" services: buildkit: image: buildkitd:v0.10.3 restart: unless-stopped my-service: image: my-image:latest ports: - "80:80" ``` 2. 在 `docker-compose.yml` 文件中,创建一个名为 `buildkit` 的服务,使用 `buildkitd` 镜像构建镜像。 3. 在 `docker-compose.yml` 文件中,创建一个名为 `my-service` 的服务,使用 `my-image` 镜像启动服务。 **注意:** * 以上步骤可能需要根据您的环境进行调整。 * 建议您在开始之前备份您的容器配置。

正文

https://www.cnblogs.com/wyh-l6/p/16590586.html

 

搭建nerdctl+buildkitd环境:
 
安装nerdctl:
wget https://github.com/containerd/nerdctl/releases/download/v0.22.0/nerdctl-0.22.0-linux-amd64.tar.gz
tar -zxvf nerdctl-0.22.0-linux-amd64.tar.gz
cp nerdctl /usr/local/bin/
安装cni:
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
mkdir /opt/cni/bin -p
tar -zxvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
安装buildkitd:
wget https://github.com/moby/buildkit/releases/download/v0.10.3/buildkit-v0.10.3.linux-amd64.tar.gz
tar -zxvf buildkit-v0.10.3.linux-amd64.tar.gz
cp -a bin/buildkitd bin/buildctl /usr/local/bin/
生成Buildkitd的socket文件
复制代码
cat <<EOF > /lib/systemd/system/buildkit.socket
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit
 
[Socket]
ListenStream=%t/buildkit/buildkitd.sock
 
[Install]
WantedBy=sockets.target
EOF
复制代码
生成buildkitd的service文件
1
2
3
4
5
6
7
8
9
10
11
12
cat <<EOF > /lib/systemd/system/buildkitd.service
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socketDocumentation=https://github.com/moby/buildkit
  
[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true
  
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start buildkitd
systemctl enable buildkitd
 
######################################################################################################
 
containerd信任harbor自签名证书:
#第一种方式:使用--insecure-registry
nerdctl login --resecure-registry harbor.wyh.net
#第二种方式:将证书拿到客户端,让客户端信任证书
mkdir /etc/containerd/certs.d/harbor.wyh.net -p
在harbor服务器将crt转换成cert
openssl x509 -inform PEM -in harbor.wyh.net.crt -out harbor.wyh.net.cert
将文件复制到客户端服务器的/etc/containerd/certs.d/harbor.wyh.net目录下
scp ca.crt harbor.wyh.net.cert harbor.wyh.net.key 192.168.213.11://etc/containerd/certs.d/harbor.wyh.net
测试是否可以登陆harbor
nerdctl login harbor.wyh.net
 
!!!nerdctl有namespace概念,默认使用的namespace可以在/etc/nerdctl/nerdctl.toml指定!!!
cat <<EOF >/etc/nerdctl/nerdctl.toml
namespace = "k8s.io"
EOF
 
!!!虽然信任证书后nerdctl可以正常拉取镜像和上传镜像到harbor,但是当制作镜像的源镜像是harbor上的镜像时会出现问题!!!
问题:此正式是未知的颁发机构签发的,所以不被信任
解决方法:
  • 使用正规机构颁发的证书(网上有免费申请的地方)
  • 在harbor前面部署nginx,nginx来挂证书,同时支持http和https
 
将harbor改为http的方法:
#关闭docker-compose
docker-compose stop
#修改其配置文件,注释掉https的配置
vim harbor.yml
更新配置
./prepare
启动
docker-compose up -d
服务启动成成功后harbor就可以使用http访问了:
启动成功后面临的问题:之前containerd配置的https访问,所以现在服务器上无法下载或者上传镜像:
解决方法:
  • 修改containerd的配置文件,改成http访问
  • 在harbor前面部署一个nginx,nginx配置https访问
对应修改buildkitd配置文件和nerdctl配置文件
mkdir /etc/{buildkit,nerdctl}
cat <<EOF >/etc/buildkit/buildkitd.toml
[registry."harbor.wyh.net"]
  http = true
  insecure = true
EOF
cat <<EOF >/etc/nerdctl/nerdctl.toml
namespace = "k8s.io"
debug = false
debug_full = false
insecure_registry = true
EOF
 
分层构建镜像的思路图:
 
 
 

与[转帖]nerdctl+buildkitd构建容器镜像相似的内容:

[转帖]nerdctl+buildkitd构建容器镜像

https://www.cnblogs.com/wyh-l6/p/16590586.html 搭建nerdctl+buildkitd环境: 安装nerdctl: wget https://github.com/containerd/nerdctl/releases/download/v0.22.0/

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes