CKA学习笔记
CKA学习笔记
CKA学习记录
容器
容器和虚拟机的区别,容器本身是一个APP,虚拟机是一个完整的系统。
容器管理
runtime,运行时。
高级别Runtime | 低级别Runtime |
---|---|
docker | runc |
containerd | lxc |
cri-o | gvisor |
rkt | kata |
podman | … |
… |
一般而言,高级别的Runtime会去调用低级别的Runtime,docker和containerd底层调用的是runc。
低级别运行时只能管理容器,高级别运行时不仅可以管理容器,还可以管理镜像。无论是高级别还是低级别运行时,所使用的镜像是一样的。
容器架构
docker是客户端工具,dockerd是服务端工具。docker默认连接的是本机dockerd,可以通过-H指定远程的dockerd服务。
containerd是服务端,上层的客户端有ctr,crictl,nerdctl,不同的客户端之间是通过命名空间相互隔离的,所以不同客户端创建的容器是隔离看不见的。
搭建环境
创建2个虚拟机,在里面分别安装docker和containerd。
使用containerd运行时是因为K8S的新版本中不再作为运行时了,但是docekr依旧可以用来打包和构建。
1 |
|
查看docker运行时
1 |
|
docker配置
1 |
|
查看containerd运行时
1 |
|
containerd配置
需要先配置客户端连接的运行时,
1 |
|
安装nerdctl客户端
crictl用起来和docker命令兼容不是很好,比较好用的是nerdctl且命令也兼容docker,所以可以单独安装nerdctl搭配containerd。
1 |
|
由于nerdctl和crictl使用的是不同的命名空间,所以是相互隔离,为了兼容crictl创建的容器,可以将nerdctl的命名空间修改为和crictl一样。
1 |
|
配置nerdctl加速
nerdctl并不会使用container的配置文件,而是有其自己的配置文件。
1 |
|
nerdctl命令自动补齐
1 |
|
容器里运行的是什么
默认运行的是CMD指定的内容,可以通用nerdctl history
查看镜像中指定的CMD命令。
1 |
|
hello-world运行默认运行的就是/hello
命令。
容器的生命周期
容器里面的运行进程结束了,容器生命周期也结束了。默认进程运行的是CMD中制定的命令。
-t 模拟终端 -i 交互界面,如果默认CMD是bash,这样bash就有个依附窗口,不会自动结束容器了。
以下是合并的内容,还需要手动处理
容器
容器和虚拟机的区别:image-20230107193134952
要想运行容器,我们必须先安装软件runtime,也就是运行时。
image-20230107192916772
无论使用上图的哪一个runtime,他们最终使用的镜像是一致的。
OCI是一个镜像结构,和容器状态标准。
在1.24的时候就不使用docker使用runtime了,可以选择containerd.
但是并不是说docker就被淘汰了,无法继续使用了,而是可以在构建镜像,搭建仓库时用。
image-20230107194018096
docker是客户端,服务端模式,客户端可以连接到远程的机器上。
containerd是一个执行引擎,可以连接不通的客户端服务,最好用的是nerdctl,nerdctl,crictl,ctr之间创建的容器是通过namespace(命名空间)隔离的互相看不到。
虚拟机创建
从temp虚机克隆出两台虚机:
vm71-docker
vm72-container
账号密码都是root redhat
然后使用命令分别设置:
./set.sh 71
./set.sh 72
关闭屏保:setterm -blank 0
docekr安装
略
continerd安装
默认是crictl
默认已经有配置文件了,但是不全。 可以生成比较全的默认配置:
containerd config dufault > /etc/containerd/config.toml
查看当前的配置命令:
containerd config dufault
crictl命令
crictl images 查看镜像
crictl info 查看信息
默认使用的namespace:k8s.io
nerdctl
命令基本都是兼容docker的,非常好用。
但是netl和crictl默认使用的命名空间 是不同的。
默认使用的default
如果是K8s创建的容器,使用nerdctl排错时需要先切换成k8s的命令空间,否则看不到。
不同的命名空间 中镜像和容器都是隔离的,namespace的作用就是资源隔离。
镜像
一个镜像打了多个tag,都是用的一个image id,只有最后一个同imageid的镜像后,镜像文件才会从服务器中删除。
容器
容器里是一定要运行一个进程的。
如果创建容器的时候指定容器里运行的是什么的话,则容器里运行的是镜像里CMD所指定的。
使用docker history查看镜像所打的CMD命令
cka22-12-containerd-2镜像管理.vep 待学