# containerd教程 - 6 namespace管理

namespace 也就是命名空间,命名空间其实就是为了更好的管理容器,可以为容器分组,在不同的分组中,可以存在同名的容器。

namespace 的操作可以使用 ctr namespacesctr namespacectr ns ,这三个命令是一样的,使用这三个都可以。

可以使用如下帮助命令,查看 namespace 有哪些操作:

ctr namespace --help
1

下面来介绍一下 namespace 的常用操作,这些命令也之前镜像的也类似。

# 6.1 查看namespace

查看有哪些 namespace:

ctr ns ls
1

可以看到本地默认就有一个 namespace,default 命名空间:

root@doubibiji-server:~# ctr ns ls
NAME    LABELS 
default        
root@doubibiji-server:~# 
1
2
3
4

我们之前下载的镜像和创建的容器都在这个 namespace 中。


如果要查看 namespace 中有哪些镜像,可以使用如下命令:

ctr -n default image ls
1

上面的命令是在 ctr image ls 命令的基础上添加全局选项 -n 命令空间 表示指定命名空间,或者使用 -namespace 命名空间

命令会列出 default 命名空间下的镜像。


同样,可以查看命名空间下的容器:

ctr -n defualt c ls
1

上面的命令是在 ctr c ls 命令的基础上添加全局选项 -n 命令空间

执行结果:

root@doubibiji-server:~# ctr -n default c ls
CONTAINER    IMAGE                             RUNTIME                  
my-nginx     docker.io/library/nginx:latest    io.containerd.runc.v2    
1
2
3

# 6.2 创建namespace

创建 namespace 使用如下命令:

ctr namespace create doubi
1
  • ctr namespace create :创建命名空间的命令,可以使用 ctr ns create
  • doubi :doubi 是命名空间的名字,自己定义;

如何在指定的 namespace 下创建容器呢?

如果要在指定的 namespace 下创建容器,需要先在该命名空间下下载镜像,在别的命名空间下的镜像,是无法使用的。

在命名空间下操作镜像、容器和任务,都需要添加全局参数,指定命名空间。

通过 ctr --help 命令可以查看到帮助信息,其中可以指定 namespace 的全局选项:


# 1 下载镜像

ctr -n doubi images pull docker.io/library/nginx:latest
1

上面下载镜像的时候,指定了命名空间是 doubi

此时查看到 doubi 命名空间下的镜像:

# 2 创建并启动容器

下载完成,可以指定命名空间,在命名空间下创建和启动容器:

ctr -n doubi run -d docker.io/library/nginx:latest my-nginx
1

此时查看到 doubi 命名空间下的容器:

root@doubibiji-server:~# ctr -n doubi c ls
CONTAINER    IMAGE                             RUNTIME                  
my-nginx     docker.io/library/nginx:latest    io.containerd.runc.v2    
1
2
3

查看 doubi 命名空间下的任务:

root@doubibiji-server:~# ctr -n doubi task ls
TASK        PID     STATUS    
my-nginx    7007    RUNNING
1
2
3

可以看出操作命名空间下的镜像、容器、任务,只需要在原来的命令上添加命令空间的全局现象即可。

# 6.3 删除namespace

删除 namespace 使用如下命令:

ctr namespace remove doubi
1
  • ctr namespace remove :删除命名空间的命令,可以使用 ctr rm create
  • doubi :doubi 是命名空间的名字;

删除命名空间的时候,命名空间下不能存在镜像、容器等信息,需要把它们先删掉。