基于 nerdctl + buildkitd + containerd 构建容器镜像-Day 04

1. 必要基础知识

容器技术除了的docker之外,还有coreOS的rkt、google的gvisor、以及docker开源的containerd、redhat
的podman、阿里的pouch等。
为了保证容器生态的标准性和健康可持续发展,包括Linux 基金会、Docker、微软、红帽、谷歌和IBM等公司在2015年6月共同成立了一个叫open container(OCI)的组织,其目的就是制定开放的、标准的容器规范。
目前OCI一共发布了两个规范,分别是runtime spec和image format spec,有了这两个规范,不同的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。

2. buildkit

https://github.com/moby/buildkit

2.1 简介

从Docker公司的开源出来的⼀个镜像构建⼯具包,⽀持OCI标准的镜像构建。
主要由两个部分组成:
(1)buildkitd(服务端):⽬前⽀持runc和containerd作为镜像构建环境,默认是runc,可以更换为containerd。
(2)buildctl(客户端):负责解析Dockerfile⽂件,并向服务端buildkitd发出构建请求,由buildkitd调用runc或者containerd来完成镜像构建。

2.2 部署buildkitd

2.2.1 下载软件包

[root@container-imagebuild ~]# cd /usr/local/src/
[root@container-imagebuild src]# wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz

[root@container-imagebuild src]# ls
buildkit-v0.11.6.linux-amd64.tar.gz

2.2.2 解压并配置

[root@container-imagebuild src]# tar xf buildkit-v0.11.6.linux-amd64.tar.gz
[root@container-imagebuild src]# ls
bin  buildkit-v0.11.6.linux-amd64.tar.gz

[root@container-imagebuild src]# mv bin/* /usr/local/bin/
[root@container-imagebuild src]# buildctl -v
buildctl github.com/moby/buildkit v0.11.6 2951a28cd7085eb18979b1f710678623d94ed578


# 生成scoket文件

[root@container-imagebuild src]# cat /lib/systemd/system/buildkit.socket
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Socket]
ListenStream=%t/buildkit/buildkitd.sock

[Install]
WantedBy=sockets.target


# 生成systemd文件
[root@container-imagebuild src]# cat /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


# 启动
[root@container-imagebuild src]# systemctl daemon-reload
[root@container-imagebuild src]# systemctl enable buildkitd
Created symlink from /etc/systemd/system/multi-user.target.wants/buildkitd.service to /usr/lib/systemd/system/buildkitd.service.
[root@container-imagebuild src]# systemctl start buildkitd

[root@container-imagebuild src]# ll /run/buildkit/buildkitd.sock
srw-rw---- 1 root root 0 619 17:55 /run/buildkit/buildkitd.sock

2.3 构建镜像

注意:下面所有关于镜像上传下载的操作,都是建立在harbor配置好https(商业证书)+域名访问的基础上

2.3.1 nerdctl命令自动补全

[root@container-imagebuild ~]# vim /etc/profile
……省略部分内容
source <(nerdctl completion bash)
[root@container-imagebuild ~]# source /etc/profile

2.3.2 配置containerd镜像加速

2.3.2.1 修改config.toml配置文件
[root@container-imagebuild ~]# vim /etc/containerd/config.toml
……省略部分内容
[plugins."io.containerd.grpc.v1.cri".registry]
      config_path = "/etc/containerd/certs.d"  # 新增镜像地址配置文件配置
2.3.2.2 创建相应目录
[root@container-imagebuild ~]# mkdir /etc/containerd/certs.d/docker.io -pv
2.3.2.3 配置镜像加速
[root@container-imagebuild ~]# cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://xxxxxxxx.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF
2.3.2.4 重启containerd生效配置
[root@container-imagebuild ~]# systemctl restart containerd
2.3.2.5 下载镜像并上传
[root@container-imagebuild ~]# nerdctl pull centos:centos7.9.2009

[root@container-imagebuild ubuntu]# nerdctl  tag centos:centos7.9.2009 tsk8s.top/myserver/centos:centos7.9.2009

[root@container-imagebuild ubuntu]# nerdctl login tsk8s.top

[root@container-imagebuild ubuntu]# nerdctl  push tsk8s.top/myserver/centos:centos7.9.2009

2.3.3 基于Ubuntu构建nginx镜像

2.3.3.1 编辑dockerfile
[root@container-imagebuild ~]# mkdir -p /opt/dockerfile/ubuntu
[root@container-imagebuild ~]# cd /opt/dockerfile/ubuntu
[root@container-imagebuild ubuntu]# cat Dockerfile
FROM ubuntu:22.04

ADD sources.list /etc/apt/sources.list
ADD nginx-1.22.0.tar.gz /usr/local/src/
ADD nginx.conf /apps/nginx/conf/
ADD frontend.tar.gz /apps/nginx/html/

RUN apt update && apt  install -y iproute2  ntpdate  tcpdump telnet traceroute nfs-kernel-server nfs-common  lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute  gcc openssh-server lrzsz tree  openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip make && \
  cd /usr/local/src/nginx-1.22.0 && \
  ./configure --prefix=/apps/nginx && \
  make && \
  make install && \
  ln -sv /apps/nginx/sbin/nginx /usr/bin && \
  groupadd  -g 2088 nginx && \
  useradd  -g nginx -s /usr/sbin/nologin -u 2088 nginx && \
  chown -R nginx.nginx /apps/nginx


EXPOSE 80 443
#ENTRYPOINT ["nginx"]
CMD ["nginx","-g","daemon off;"]
2.3.3.2 准备相关文件
[root@container-imagebuild ubuntu]# ll
总用量 1108
-rw-r--r-- 1 root root     280 57 18:42 build-command.sh
-rw-r--r-- 1 root root     906 620 13:44 Dockerfile
-rw-r--r-- 1 root root   38751 85 2022 frontend.tar.gz
drwxr-xr-x 3 root root      38 57 19:14 html
-rw-r--r-- 1 root root 1073322 524 2022 nginx-1.22.0.tar.gz
-rw-r--r-- 1 root root    2812 103 2020 nginx.conf
-rw-r--r-- 1 root root    1139 85 2022 sources.list
2.3.3.3 构建镜像
[root@container-imagebuild ubuntu]# cat build-command.sh
#!/bin/bash
#docker build -t harbor.magedu.net/myserver/nginx:v1 .
#docker push harbor.magedu.net/myserver/nginx:v1

/usr/local/bin/nerdctl build -t tsk8s.top/myserver/nginx-base:1.22.0 .

/usr/local/bin/nerdctl push tsk8s.top/myserver/nginx-base:1.22.0

[root@container-imagebuild ubuntu]# sh build-command.sh

在这里插入图片描述

3. 基于⾃定义镜像创建测试容器

3.1 创建容器

[root@container-imagebuild ubuntu]# nerdctl run -d -p 80:80 tsk8s.top/myserver/nginx-base:1.22.0

在这里插入图片描述

3.2 访问测试

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值