跳转至

镜像拉取与运行

containerd 默认的三个名称空间(Namespace):

  • default
  • docker.io
  • k8s.io

镜像拉取

将 hello-world:latest 镜像拉取到默认的名称空间中

ctr image pull docker.io/library/hello-world:latest

将 busybox:latest 镜像拉取到 k8s.io 名称空间中

ctr -n k8s.io image pull docker.io/library/busybox:latest

ctr -n k8s.io image pull registry.aliyuncs.com/k8sxio/pause:3.6

分别查看拉取的镜像

ctr image ls

ctr -n k8s.io image ls

运行容器

运行 hello-world:latest

ctr run docker.io/library/hello-world:latest hello-world

分步运行 busybox 镜像

# 创建一个container(此时还未运行)
ctr -n k8s.io container create docker.io/library/busybox:latest busybox

# 创建一个task并后台运行
ctr -n k8s.io task start -d busybox

# 一步到位: ctr -n k8s.io run -d docker.io/library/busybox:latest busybox

查看创建的容器与 Task

ctr container ls

ctr -n k8s.io container ls

查看该容器在宿主机的 PID

ctr -n k8s.io task ls
ps ajxf|grep "containerd-shim-runc\|2205"|grep -v grep

进入到容器内部执行 shell 命令

ctr -n k8s.io t exec --exec-id $RANDOM -t busybox sh

执行如下命令:

/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
/ # uname -r 
4.18.0-348.23.1.el8_5.x86_64
  • 只有 lo 网络卡,可以通过 CNI 插件的形式添加网卡实现外部网络通信
  • 共享宿主机内核

删除创建的 Task 与容器

# 发送 SIGKILL 信号量杀死该容器
ctr -n k8s.io t kill -s SIGKILL busybox
ctr -n k8s.io task rm busybox
ctr -n k8s.io snapshots rm busybox
ctr -n k8s.io container rm busybox

ctr snapshots rm hello-world
ctr container rm hello-world

配置不安全镜像源

containerd 配置不安全镜像源的方式:

# /etc/containerd/certs.d/<镜像地址>/host.toml
server = "https://<your registry>"

[host."https://<your registry>"]
  capabilities = ["pull", "resolve"]
  skip_verify = true