首页 > 其他分享 >轻量级容器运行时:Containerd的部署与使用

轻量级容器运行时:Containerd的部署与使用

时间:2023-08-18 10:37:24浏览次数:44  
标签:bin 容器 ctr Containerd nerdctl nginx containerd 轻量级

containerd作为轻量级容器运行时,被认为是最热门的Docker替代方案,目前已在阿里云、腾讯云等多家云商得到了支持,相信未来会有非常不错的发展前景。

在前面的文章已对产品的功能架构进行了介绍,本文我们将更进一步,来学习containerd的部署与使用。


01

部署containerd

1. 下载二进制文件 

$ wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz

2. 解压文件到/usr/local

$ sudo tar Cxzvf /usr/local containerd-1.6.12-linux-amd64.tar.gz
bin/
bin/ctr
bin/containerd
bin/containerd-shim
bin/containerd-stress
bin/containerd-shim-runc-v2
bin/containerd-shim-runc-v1

3. 下载containerd.service文件,用于启动服务

$ wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
$ sudo mv containerd.service /usr/lib/systemd/system

4. 启动服务

$ systemctl daemon-reload
$ systemctl enable --now containerd
$ sudo systemctl restart containerd

5. 安装runc

$ wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.amd64
$ sudo install -m 755 runc.amd64 /usr/local/sbin/runc

6. 安装cni插件

$ wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
$ mkdir -p /opt/cni/bin
$ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.2.0.tgz

OK,现在我们可以开始使用了。


02

使用containerd

如果你对Docker熟悉的话,那么在使用containerd时应该不会有太多问题。但有一点需要注意,containerd支持namespace的概念,这里的功能与Kubernetes中的namespace相似。namespace可以看成是隔离域,一个namespace中的镜像和容器,在其他namespace中是被无法看到的。

containerd支持的客户端工具包括 ctr、nerdctl 和 crictl 三款,它们都是可以通过命令行方式来管理和操作容器,下面我们来学习一下它们的使用方式。


轻量级容器运行时:Containerd的部署与使用_docker

1. ctr

ctr 是 containerd 的自带客户端工具,可以用于管理本地和远程的容器。ctr相对于docker客户端而言,在功能上没有那么丰富,能够实现创建、删除、运行、停止、暂停等容器基本操作。

使用示例:

  • 查看namespace
$ ctr namespace ls
NAME     LABELS
default

注:默认情况下,ctr 下载的镜像和启动容器都会放到default的namesapce中。

  • 拉取镜像
$ ctr image pull docker.io/library/nginx:latest

注:使用ctr拉取Docker官方镜像时,需要添加docker.io的完整路径,否则会报错。

  • 创建并启动容器
$ ctr run -d  docker.io/library/nginx:latest nginx

注:ctr没有--name的选项,因此在最后指定容器名,此处创建了一个名称为nginx的容器。

  • 查看容器
$ ctr containers ls
CONTAINER    IMAGE                             RUNTIME
nginx        docker.io/library/nginx:latest    io.containerd.runc.v2

注:如果要查看其他namespace的容器,可以加上 -n,如:ctr -n k8s.io containers ls。

  • 停止容器
$ ctr task kill nginx

注:由于ctr没有stop的子命令,所以只能通过杀掉容器进程的方式来进行停止。

  • 删除容器
$ ctr container rm nginx

更多命令可以通过 ctr --help 命令查看。

2. nerdctl

nerdctl是一款第三方工具,需要单独安装。它出现的目的是为了兼容docker客户端命令,因此在使用上提供了类似的体验。nerdctl 目前处于活跃开发阶段,部分命令和功能可能还不够稳定。

安装nerdctl

$ wget https://github.com/containerd/nerdctl/releases/download/v1.2.1/nerdctl-1.2.1-linux-amd64.tar.gz
$ tar -zxvf nerdctl-1.2.1-linux-amd64.tar.gz
$ mv nerdctl /usr/local/bin/

使用示例:

  • 拉取镜像
$ nerdctl pull nginx
  • 创建容器
$ nerdctl run -d --name nginx nginx
  • 查看容器
$ nerdctl ps
  • 停止容器
$ nerdctl stop nginx
  • 删除容器
$ nerdctl rm nginx

更多命令可以通过 nerdctl --help 命令查看。

3. crictl

crictl 是 Kubernetes CRI(容器运行时接口)的命令行工具,支持通过 CRI 标准管理容器。与 ctr 和 nerdctl 不同的是,crictl 不能直接管理 containerd 守护进程,而是通过 CRI 接口与容器运行时通信,所以通常在Kubernetes的环境中才会使用。

使用示例:

  • 拉取镜像
$ crictl pull nginx
  • 基于配置文件在Pod中创建容器
$ vi od-config.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "log_directory": "/tmp",
    "linux": {
    }
}

$ vi container-config.json
{
  "metadata": {
      "name": "busybox"
  },
  "image":{
      "image": "busybox"
  },
  "command": [
      "top"
  ],
  "log_path":"busybox.0.log",
  "linux": {
  }
}

$ crictl run container-config.json pod-config.json
  • 查看容器
$ crictl ps
  • 查看Pod
$ crictl pods
  • 停止容器
$ crictl stop <CONTAINER_ID>
  • 删除容器
$ crictl rm <CONTAINER_ID>

ctr、nerdctl 和 crictl 都是用于管理和操作容器的命令行工具,可以根据需要选择适合自己的工具。对于需要与 Kubernetes 集成的用户,crictl 是不错的选择;而对于更多的容器开发者和运维人员,ctr 和 nerdctl 提供了更多的功能和控制。

标签:bin,容器,ctr,Containerd,nerdctl,nginx,containerd,轻量级
From: https://blog.51cto.com/u_64214/7132196

相关文章

  • docker容器daemon.json配置文件解析
    docker版本高于1.12,配置文件的默认径为:/etc/docker/daemon.json{“api-cors-header”:"",在引擎API中设置CORS标头“authorization-plugins”:[],要加载的授权插件“bridge”:"",将容器附加到网桥“cgroup-parent”:"",为所有容器设置父cgroup“cluster-store......
  • 容器编排平台的自动伸缩与负载均衡:使用自动伸缩组和负载均衡器实现弹性扩展和负载均衡
    本文将介绍如何使用自动伸缩组和负载均衡器在容器编排平台上实现弹性扩展和负载均衡。我们将探讨自动伸缩组和负载均衡器的概念,并详细介绍它们在容器编排平台中的应用。此外,我们还将提供相关代码示例,以帮助读者更好地理解和实践这些概念。引言随着容器技术的发展,容器编排平台成......
  • 浅谈加密容器取证思路---以EnFSMP为例
    软件介绍EnFSMP这个工具可以帮助生成一个加密容器,并挂载磁盘。相比于VC、TC,它的优势是不需要指定虚拟磁盘的大小。相反的,它要求的是一个文件夹,在文件夹中生成一个xml配置文件,虚拟磁盘中的文件会以加密后的形式保存在这个文件夹中。虚拟磁盘挂载后,在此电脑的显示中,总容量和可......
  • [kubernetes]二进制部署k8s集群-基于containerd
    0.前言k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker。其实docker自身也是调用containerd,与其k8s通过docker再调用containerd,不如k8s直接调用containerd,以减少性能损耗。除了containerd,比较流行的容器运行时还有podman,但是podm......
  • Docker容器设置自启动
    容器自启动分为两种情况一为新建容器时配置自启参数dockerrun--restart=always容器id或容器名称二为已存在的容器配置自启dockerupdate--restart=always容器id或容器名称取消容器自启dockerupdate--restart=no容器id或容器名称批量设置容器自启dockerupda......
  • 如何找到docker容器中的网卡外联的veth pair的另一张网卡
    1、概述在Docker容器中,每个容器都有一个或多个网络接口(网卡),用于连接容器内部与宿主机或其他容器进行通信。这些网络接口中的一些可能是vethpair,也就是虚拟以太网对,它们以成对的方式存在,一侧连接到容器内部,另一侧连接到宿主机的网络命名空间。vethpair的一侧称为......
  • C++黑马程序员——P231-235. map容器
    P231.map容器-构造和赋值P232....-大小和交换P233....-插入和删除P234....-查找和统计P235....-排序P231.构造和赋值  ——————————————————————————————————————————————————————————构造:map<T1,T2>......
  • Docker容器怎么安装Vim编辑器
    ​ 在现代软件开发和系统管理中,Docker已经成为一个不可或缺的工具。它允许我们轻松地创建、部署和运行应用程序,以及构建可移植的容器化环境。然而,在Docker容器中安装特定的工具可能会有一些挑战,因为容器本身是精简的、隔离的运行环境。在本文中,我们将讨论如何在Docker容器中安装......
  • 容器数据卷的使用
    作用:将容器目录与本地目录绑定将文件数据备份到本地目录中使用run-v本机目录:容器目录PSC:\Users\az>dockerrun-it-v/home/ceshi:/homecentos/bin/bash   实战安装mysql:1:安装mysql镜像2:启动mysql,创建数据卷目录,并且创建mysql密码 dockerrun-it-p3310:3......
  • 第四:Docker容器的管理
    运行第一个容器:交互式启动(-i):dockercontainerrun-it32 (32为image的ID)守护式启动:(-d) :  dockercontainerrun--name="nginx"-d605c77e624dd  起容器的时候同时设置容器的名称为mysql容器启动后:第一:我想查询下容器的状态   dockercontainerls-a  ......