[转帖]像使用 Docker 一样使用 Containerd

使用,docker,一样,containerd · 浏览次数 : 0

小编点评

归纳总结以上内容,生成内容时需要带简单的排版,以便在阅读中容易理解。以下是一些建议: 1. **使用排版符号**:例如,使用 `>` 和 `<`符号表示文本的格式。 2. **使用缩短符号**:例如,使用 `` 和 ``符号缩短文本的长度。 3. **使用格式化符号**:例如,使用 `` 和 ``符号格式化文本的格式。 4. **使用缩短命令**:例如,使用 `` 和 ``符号缩短命令的长度。 5. **使用排版符号**:例如,使用 `>` 和 `<`符号表示文本的格式。 通过遵循这些建议,可以使内容更加易读,并更容易在阅读中理解。

正文

http://www.manongjc.com/detail/28-zztmioqxomwjmqy.html

 

 
本文章向大家介绍像使用 Docker 一样使用 Containerd,主要包括像使用 Docker 一样使用 Containerd使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
 

现有 CLI 的不足

虽然 Docker 能干的事情,现在Containerd 都能干,但 Containerd 还有一个非常明显的缺陷:CLI不够友好。它无法像Docker 和Podman 一样通过一条简单的命令启动一个容器,它的两个 CLI 工具 [ctr] 和 [crictl] 都无法实现这么一件非常简单的需求,而这个需求是大多数人都需要的.

ctr 的设计对人类不太友好,例如缺少以下这些和 Docker 类似的功能:

  • docker run -p
  • docker run --restart=always
  • 通过凭证文件 ~/.docker/config.json 来拉取镜像
  • docker logs

除此之外还有一个 CLI 工具叫crictl,和ctr 一样不太友好。

为了解决这个痛点,Containerd 官方推出了一个新的 CLI 叫 [nerdctl]。nerdctl的使用体验和 docker 一样顺滑,例如:

nerdctl run -d -p 8080:80 --name=nginx --restart=always nginx

nerdctl 使用

可以从 nerdctl 的 release中下载最新的可执行文件,每一个版本都有两种可用的发行版:

  • nerdctl--linux-amd64.tar.gz : 只包含 nerdctl
  • nerdctl-full--linux-amd64.tar.gz : 包含了 nerdctl 和相关依赖组件(containerd, runc, CNI, …)

如果你已经安装了 Containerd,只需要选择前一个发行版,否则就选择完整版。

下载地址:https://github.com/containerd/nerdctl/releases

下载最新版本的nerdctl,解压到/usr/local/bin里:

tar zxvf nerdctl-0.17.1-linux-amd64.tar.gz -C /usr/local/bin/

# ls /usr/local/bin/
containerd-rootless-setuptool.sh  containerd-rootless.sh  nerdctl

# chmod a+x *

使用教程文档地址:https://github.com/containerd/nerdctl

安装网络插件CNI

到 https://github.com/containernetworking/plugins/releases 下载最新版本CNI插件,解压放在/opt/cni/bin目录中。

mkdir -p /opt/cni/bin/
tar zxf cni-plugins-linux-amd64-v1.1.0.tgz -C /opt/cni/bin/

# cd /opt/cni/bin/ && ll
-rwxr-xr-x 1 root root 3780654 2月  24 01:01 bandwidth
-rwxr-xr-x 1 root root 4221823 2月  24 01:01 bridge
-rwxr-xr-x 1 root root 9738322 2月  24 01:01 dhcp
-rwxr-xr-x 1 root root 4345726 2月  24 01:01 firewall
-rwxr-xr-x 1 root root 3811793 2月  24 01:01 host-device
-rwxr-xr-x 1 root root 3241605 2月  24 01:01 host-local
-rwxr-xr-x 1 root root 3922560 2月  24 01:01 ipvlan
-rwxr-xr-x 1 root root 3295519 2月  24 01:01 loopback
-rwxr-xr-x 1 root root 3959868 2月  24 01:01 macvlan
-rwxr-xr-x 1 root root 3679140 2月  24 01:01 portmap
-rwxr-xr-x 1 root root 4092460 2月  24 01:01 ptp
-rwxr-xr-x 1 root root 3484284 2月  24 01:01 sbr
-rwxr-xr-x 1 root root 2818627 2月  24 01:01 static
-rwxr-xr-x 1 root root 3379564 2月  24 01:01 tuning
-rwxr-xr-x 1 root root 3920827 2月  24 01:01 vlan
-rwxr-xr-x 1 root root 3523475 2月  24 01:01 vrf

设置nerdctl子命令可以使用tab键

在/etc/profile里添加source <(nerdctl completion bash),如下:

# head -2 /etc/profile

# /etc/profile
source <(nerdctl completion bash)

# source /etc/profile

使用教程

# 拉取镜像
# nerdctl pull nginx:alpine

# 查看镜像
# nerdctl image ls         
REPOSITORY    TAG       IMAGE ID        CREATED          PLATFORM       SIZE         BLOB SIZE
nginx         alpine    da9c94bec1da    3 hours ago      linux/amd64    25.2 MiB     9.7 MiB

# 给镜像打tag
# nerdctl tag docker.io/library/nginx:alpine jdd.io/cka/nginx:v1

# nerdctl image ls
REPOSITORY          TAG       IMAGE ID        CREATED          PLATFORM       SIZE         BLOB SIZE
nginx               alpine    da9c94bec1da    3 hours ago      linux/amd64    25.2 MiB     9.7 MiB
jdd.io/cka/nginx    v1        da9c94bec1da    1 second ago     linux/amd64    25.2 MiB     9.7 MiB

# 创建容器
# nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:alpine
eca0bdc6ab6ffbb63216c1b975010959f1953fa4c95337d13a9d6ceceb489f77

# 查看创建的容器
# nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                 NAMES
eca0bdc6ab6f    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    26 seconds ago    Up        0.0.0.0:80->80/tcp    nginx

# 进入容器内部
# nerdctl exec -it nginx /bin/sh

# 和 Docker 一样,Containerd 也有一个子命令network:
# nerdctl network ls
NETWORK ID    NAME      FILE
0             bridge    
              host      
              none 

# 查看默认的 bridge 配置 (可以看到 network 子命令背后还是 CNI 在运作,与 docker network 子命令原理不同。)
# nerdctl network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "0",
        "IPAM": {
            "Config": [
                {
                    "Subnet": "10.4.0.0/24",
                    "Gateway": "10.4.0.1"
                }
            ]
        },
        "Labels": {}
    }
]

构建镜像

nerdctl 也可以和buildkit 结合使用来构建容器镜像,需要先下载buildkit 的可执行文件:

地址:https://github.com/moby/buildkit/releases

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

将其解压到/usr/local里:

# tar -zxv -f buildkit-v0.9.3.linux-amd64.tar.gz -C /usr/local/
# cd /usr/local/bin && ls
-rwxr-xr-x 1 root root 25845982 10月 21 2015 buildctl
-rwxr-xr-x 1 root root 38767973 10月 21 2015 buildkitd
-rwxr-xr-x 1 root root  5024816 10月 21 2015 buildkit-qemu-aarch64
-rwxr-xr-x 1 root root  4009104 10月 21 2015 buildkit-qemu-arm
-rwxr-xr-x 1 root root  3662408 10月 21 2015 buildkit-qemu-i386
-rwxr-xr-x 1 root root  4554864 10月 21 2015 buildkit-qemu-mips64
-rwxr-xr-x 1 root root  4546672 10月 21 2015 buildkit-qemu-mips64el
-rwxr-xr-x 1 root root  4111432 10月 21 2015 buildkit-qemu-ppc64le
-rwxr-xr-x 1 root root  3844552 10月 21 2015 buildkit-qemu-riscv64
-rwxr-xr-x 1 root root  3444936 10月 21 2015 buildkit-qemu-s390x
-rwxr-xr-x 1 root root 20522896 10月 21 2015 buildkit-runc
-rwxr-xr-x 1 root root    18692 3月   3 18:21 containerd-rootless-setuptool.sh
-rwxr-xr-x 1 root root     6972 3月   3 18:21 containerd-rootless.sh
-rwxr-xr-x 1 root root 27738112 3月   3 18:22 nerdctl

编写 systemd unit 文件:

# cat /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 daemon-reload
systemctl enable --now buildkit.service # 启用 buildkit.service 并设置开机自动运行
 
[root@myrabbit3 jre_docker]# ll
总用量 12
-rw-r--r-- 1 root root 450 9月  27 17:06 Dockerfile
-rw-r--r-- 1 root root 556 4月  22 2021 localtime
-rw-r--r-- 1 root root  14 4月  22 2021 timezone

# nerdctl build -t jre_docker .
[+] Building 288.7s (13/13) FINISHED                                                                                                                                     
 => [internal] load build definition from Dockerfile                                                                                                                0.0s
 => => transferring dockerfile: 489B                                                                                                                                0.0s
 => [internal] load .dockerignore                                                                                                                                   0.0s
 => => transferring context: 2B                                                                                                                                     0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                                                                   15.1s
 => [1/8] FROM docker.io/library/alpine:latest@sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300                                              0.1s
 => => resolve docker.io/library/alpine:latest@sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300                                              0.0s
 => => extracting sha256:59bf1c3509f33515622619af21ed55bbe26d24913cedbca106468a5fb37a50c3                                                                           0.1s
 => [internal] load build context                                                                                                                                   0.0s
 => => transferring context: 645B                                                                                                                                   0.0s
 => [2/8] COPY localtime /etc/localtime                                                                                                                             0.0s
 => [3/8] COPY timezone /etc/timezone                                                                                                                               0.0s
 => [4/8] RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories                                                                  0.3s
 => [5/8] RUN echo "https://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories                                                            0.2s
 => [6/8] RUN ["apk","update"]                                                                                                                                      9.6s
 => [7/8] RUN ["apk","add","curl"]                                                                                                                                  4.5s
 => [8/8] RUN ["apk","add","openjdk8-jre"]                                                                                                                        253.1s
 => exporting to oci image format                                                                                                                                   5.6s 
 => => exporting layers                                                                                                                                             3.9s 
 => => exporting manifest sha256:6a86c31cf2017581ac44f201ed0f01fde75b1bcdb84ae78fd1e8781f66aaad06                                                                   0.0s 
 => => exporting config sha256:d7c7db923c7d874de7fbc83bf5887ad66373205e7572a74c5f013469deabb74c                                                                     0.0s 
 => => sending tarball                                                                                                                                              1.7s 
unpacking docker.io/library/jre_docker:latest (sha256:6a86c31cf2017581ac44f201ed0f01fde75b1bcdb84ae78fd1e8781f66aaad06)...done                                    


# 查看镜像
# nerdctl image ls
REPOSITORY          TAG       IMAGE ID        CREATED           PLATFORM       SIZE         BLOB SIZE
jre_docker          latest    6a86c31cf201    51 seconds ago    linux/amd64    109.2 MiB    70.3 MiB
nginx               alpine    da9c94bec1da    4 hours ago       linux/amd64    25.2 MiB     9.7 MiB
jdd.io/cka/nginx    v1        da9c94bec1da    24 minutes ago    linux/amd64    25.2 MiB     9.7 MiB
 
 

原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/15976207.html

与[转帖]像使用 Docker 一样使用 Containerd相似的内容:

[转帖]像使用 Docker 一样使用 Containerd

http://www.manongjc.com/detail/28-zztmioqxomwjmqy.html 本文章向大家介绍像使用 Docker 一样使用 Containerd,主要包括像使用 Docker 一样使用 Containerd使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的

[转帖]深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

https://www.cnblogs.com/jiangjunli/p/10617034.html 1、内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和course

[转帖]netflix火焰圖(profile + 轉為圖像)

本文转载自 ligeforrent 查看原文 2017-06-30 0 file/file/ 运维/运维/ profile/profile/ 图像/图像/ netnet 使用方法:利用google的lightweight-Java-profiler獲取java進程的profile(類hprof格式)

[转帖]使用Flame Graph进行系统性能分析

http://t.zoukankan.com/arnoldlu-p-10148558.html 关键词:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图。 从底向上像火苗一样逐渐变小,也反映了相互之间的包

【转帖】一文解析ethtool 命令的使用

命令简介 ethtool命令用于查询和控制网络设备驱动程序和硬件设置,尤其是有线以太网设备,devname网卡的名称。网卡就像是交换机的一个端口,正常使用我们只是配置网卡IP地址等信息,网卡的速率、双工模式等我们并不关心。通过ethtool命令我们可以像配置交换机网卡一样配置这些参数,这就是这个命令

[转帖]磁盘缓存和内存缓存的区别

内存缓存 高速缓存(英语:cache,英语发音:/kæʃ/ kash [1][2][3],简称缓存),其原始意义是指访问速度比一般随机存取存储器(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 原理 Cache一词来源于1967年的一篇电子工程期刊

[转帖]Linux平台shell脚本输入密码,不显示明文

需求:shell脚本中输入密码,要求不显示明文,需要将其转换为“*”星号,或者不显示 实现方案:有两种实现方案,一是通过stty命令来实现,二是直接使用read来实现 方案一:使用stty来实现 使用stty -echo可以实现不显示密码,就像登录Linux系统输入密码时一样,stty的代码如下:

[转帖]LVM条带化

一、条带化的概念 一般以LVM管理的存储,一个vg中可能会有很多pv,同样的,一个lv可能跨越多块pv,为了使硬盘存储速度加快,就会用到条带化的技术,即把连续的数据分成大小相同的数据块,然后依次存储在各个pv上。类似于RAID0,使存储速度加快。但并不会使数据像RAID0一样危险容易丢失,因为在正式

[转帖]详解:Linux Chrony 设置服务器集群同步时间

https://www.linuxprobe.com/centos7-chrony-time.html 导读 Chrony是一个开源的自由软件,像CentOS 7或基于RHEL 7操作系统,已经是默认服务,默认配置文件在 /etc/chrony.conf 它能保持系统时间与时间服务器(NTP)同步,

[转帖]Linux中的目录结构是什么样的?有人说像“树”,你觉得呢

https://bbs.huaweicloud.com/blogs/380543 【摘要】 在 Linux/Unix 操作系统中,一切都是文件,即使目录是文件,普通文件也是文件,鼠标、键盘、打印机等设备也是文件,本文笔者将带大家了解一下Linux中的文件目录结构。 文件类型Linux 中有三大类文件