containerd buildkit镜像

containerd默认不支持build操作,需要安装插件配置使用

# 未安装buildkit时
$ nerdctl build
FATA[0000] `buildctl` needs to be installed and `buildkitd` needs to be running, see https://github.com/moby/buildkit: exec: "buildctl": executable file not found in $PATH 
# 安装步骤:
# 下载软件包
# 官网地址:https://github.com/moby/buildkit/releases
$ wget https://github.com/moby/buildkit/releases/download/v0.9.2/buildkit-v0.9.2.linux-amd64.tar.gz
$ tar -xf buildkit-v0.9.2.linux-amd64.tar.gz -C /usr/local/
# 创建配置systemd管理文件
$ vim /etc/systemd/system/buildkit.service
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true

[Install]
WantedBy=multi-user.target

# 启动
$  systemctl enable buildkit --now

# 构建测试
$ nerdctl build -t  resin:latest .
[+] Building 15.0s (10/10) FINISHED                                                                                                                   
 => [internal] load build definition from Dockerfile                                                                                             0.0s
 => => transferring dockerfile: 266B                                                                                                             0.0s
 => [internal] load .dockerignore                                                                                                                0.0s
 => => transferring context: 2B                                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                      3.7s
 => [1/5] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                0.0s
 => => resolve docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                0.0s
 => [internal] load build context                                                                                                                0.5s
 => => transferring context: 440.44kB                                                                                                            0.5s
 => CACHED [2/5] RUN mkdir /u01                                                                                                                  0.0s
 => CACHED [3/5] ADD . /u01                                                                                                                      0.0s
 => CACHED [4/5] COPY entrypoint.sh /usr/bin                                                                                                     0.0s
 => CACHED [5/5] WORKDIR /u01                                                                                                                    0.0s
 => exporting to oci image format                                                                                                               10.7s
 => => exporting layers                                                                                                                          0.0s
 => => exporting manifest sha256:3e31b8c0ffab4dc70e0c0010d41bd50b03c4affae144b0a30066b773b66f1e34                                                0.0s
 => => exporting config sha256:faa7efda05fe11ba51134a3ed2054d87791d158e2c6e7f99bd48616ea065c1ec                                                  0.0s
 => => sending tarball                                                                                                                          10.7s
unpacking docker.io/library/resin:latest (sha256:3e31b8c0ffab4dc70e0c0010d41bd50b03c4affae144b0a30066b773b66f1e34)...done
unpacking overlayfs@sha256:3e31b8c0ffab4dc70e0c0010d41bd50b03c4affae144b0a30066b773b66f1e34 (sha256:3e31b8c0ffab4dc70e0c0010d41bd50b03c4affae144b0a30066b773b66f1e34)...done
### 使用 Containerd 创建容器镜像 Containerd 是一种流行的容器运行时工具,支持 OCI 标准并广泛应用于 Kubernetes 集群中作为默认的容器运行时。虽然 Containerd 本身并不直接提供构建镜像的功能,但它可以通过与其他工具集成来实现这一目标,比如 Nerdctl 和 BuildKit。 以下是关于如何通过 `Nerdctl` 结合 `BuildKit` 来利用 Containerd 构建容器镜像的技术细节: #### 工具简介 - **Nerdctl**: Docker CLI 的替代品之一,能够与 containerd 协同工作,提供了类似于 Docker 的命令集[^1]。 - **BuildKit**: 负责实际的镜像构建过程,是一个高性能、模块化的构建工具,被设计用于加速和优化容器镜像的构建流程[^2]。 #### 步骤说明 尽管不能使用诸如“首先”这样的引导词,下面的内容将详细介绍所需的操作方法及其背景原理。 安装好必要的组件之后,用户可以借助如下方式完成镜像创建的任务: ```bash nerdctl build -t my-image:latest . ``` 上述命令中的 `-t` 参数指定了新生成镜像的名字及标签;`.` 表明当前目录下的文件会被用来执行构建动作。 此过程中,Nerdctl 将调用本地配置好的 BuildKit 实例来进行具体处理,并最终把成果存储到关联着它的 Containerd 中去。 另外值得注意的是,在某些特定场景下可能还需要额外设置环境变量或者调整服务端参数以便更好地适配不同的需求情况,例如启用实验特性或是指定远程 registry 地址等。 对于更复杂的多阶段构建情形,则可通过编写标准形式的 Dockerfile 文件来定义各个步骤逻辑关系,而无需关心底层差异性问题因为这些高级功能同样得到了良好支持。 ### 示例代码展示 这里给出一段简单的例子供参考学习用途: 假设存在这样一个名为 `app.py` 的 Python 应用程序脚本位于项目根路径之下, 我们希望将其打包成为独立运行版本的基础镜像结构。 ```Dockerfile # Use an official lightweight Python image. FROM python:3.9-slim # Set the working directory to /app inside the container WORKDIR /app # Copy current directory contents into the container at /app COPY . . # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"] ``` 随后只需运行一次前面提到过的那条核心指令即可自动按照预设规则组装完毕所需的成品资源包了! ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值