docker run-Containerd
docker run -it 运行容器
交互式方式启动
# 以交互式方式启动并进入容器
docker run --name=hello -it centos /bin/bash
# 输入exit,退出容器,退出之后容器也会停止,不会再前台运行
- docker run运行并创建容器
–name 容器的名字
-i 交互式
-t 分配伪终端
centos: 启动docker需要的镜像
/bin/bash说明你的shell类型为bash,bash shell是最常用的一种shell, 是大多数Linux发行版默认的shell。 此外还有C shell等其它shell。
守护进程方式启动
docker run --name=hello1 -td centos
-d在后台运行docker
docker exec -it hello1 /bin/bash
其他命令
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器,包括运行和退出的容器
docker stop hello1 # 停止容器
docker start hello1 # 启动已经停止的容器
docker exec -it hello1 /bin/bash # 进入容器
docker rm -f hello1 # 删除容器
docker --help # 查看docker帮助命令
docker部署nginx服务
基于centos镜像运行容器,在容器里面安装nginx服务。
# 1、运行容器
docker run --name nginx -p 80 -itd centos
# 2、进入容器
docker exec -it nginx /bin/bash
# 3、查看容器的id
ip addr
# 4、yum安装nginx
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-
8.5.2111.repo
yum install wget -y
yum install nginx -y
# 5、安装文本编辑器vim
yum install vim-enhanced -y
# 6、创建静态页面
mkdir /var/www/html -p
cd /var/www/html/
cat index.html
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,My Name is xianchao</h1>
</body>
</html>
# 7、修改nginx配置文件中的root路径,如下
vim /etc/nginx/nginx.conf
root /var/www/html/;
# 8、查看容器(能查看到nginx容器在物理机映射的端口是49153 )
[root@xianchaomaster1 ~]# docker ps | grep nginx
ecfa046e9681 centos "/bin/bash"
12 minutes ago Up 12 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx
# 9、直接访问curl http://192.168.40.180:49153
流量走向:
访问物理节点ip:port(容器在物理节点映射的端口)–→容器ip:port(容器里部署的服务的端口)-> 就可以访问到容器里部署的应用了
k8s废弃docker原因
-
Containerd 和 Docker 之间的关系
Docker 包含 Containerd,Containerd 专注于运行时的容器管理,而 Docker 除了容器管理之外,还可以完成镜像构建之类的功能。
Containerd 提供的 API 偏底层,不是给普通用户直接用的,容器编排的开发者才需要Containerd。 -
Containerd 在容器生态中扮演的角色
Containerd 并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如 Kubernetes 等容器编排系统。
Containerd 以 daemon 的形式运行在系统上,通过 unix domain socket 暴露底层的 grpc API,上层系统可以通过这些 API 管理机器上的容器。 -
废弃原因
Docker,Kubernetes 等工具来运行一个容器时会调用容器运行时(CRI),比如 containerd,CRIO,通过容器运行时来完成容器的创建、运行、销毁等实际工作,Docker 使用的是 containerd 作为其运行时;Kubernetes 支持 docker(在 k8s1.24 版本之前用,1.24 开始废弃了)、containerd, CRI-O 等多种容器运行时,这些容器运行时都遵循了 OCI 规范,并通过 runc 来实现与操作系统内核交互来完成容器的创建和运行
CRI
CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,你需要在集群中的每个节点上都有一个可以正常工作的容器运行时, 这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是 kubelet 和容器运行时之间通信的主要协议。
安装和配置containerd
安装 docker 会自动把 containerd 安装出来,也可以通过如下命令直接安装 containerd。
需要配置 docker-ce.repo 这个 yum 源:
[root@xianchaomaster1 ~]#yum install yum-utils -y
[root@xianchaomaster1 ~]#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@xianchaomaster1 ~]# yum install containerd -y
[root@xianchaomaster1 ~]# systemctl enable containerd
[root@xianchaomaster1 ~]# systemctl start containerd
初始化Containerd配置
[root@xianchaomaster1 ~]# containerd config default > /etc/containerd/config.toml
[root@xianchaomaster1 ~]# systemctl enable containerd
[root@xianchaomaster1 ~]# systemctl start containerd
# 替换 containerd 默认的 sand_box 镜像,编辑/etc/containerd/config.toml 文件:
sandbox_image = "k8s.gcr.io/pause:3.2"
替换成
registry.cnhangzhou.aliyuncs.com/google_containers/pause-amd64:3.2
应用配置并重新运行 containerd 服务
[root@xianchaomaster1 ~]# systemctl daemon-reload
[root@xianchaomaster1 ~]# systemctl restart containerd
[root@xianchaomaster1 ~]# systemctl status containerd containerd.service - containerd container runtime
Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset:
disabled)
Active: active (running) since Tue 2021-04-20 21:10:45 CST; 8s ago
可以先将这个镜像拉下来
[root@xianchaomaster1 ~]# ctr images pull registry.cnhangzhou.aliyuncs.com/google_containers/pause-amd64:3.2
containerd常用命令
#查看 containerd 命名空间
ctr namespace ls
#查看默认名称空间镜像有哪些
ctr image ls
#查看 k8s 命名空间下的镜像
ctr -n=k8s.io images ls
#拉取 busybox 镜像
ctr image pull docker.io/library/busybox:latest
#注:必须全路径,从 dockerhub 上下载默认 busybox 镜像。
ctr images rm 删除镜像
ctr --help
# 压缩镜像
ctr images pull docker.io/library/mysql:latest
ctr images export mysql.tar.gz docker.io/library/mysql:latest
# 导出镜像
ctr images import mysql.tar.gz
# 删除镜像
ctr i rm docker.io/library/busyboxv:1
docker 的镜像和 containerd 镜像通用吗?
答:通用的,docker save -o 生成的镜像文件,可以基于 ctr images import 导出来
# 运行容器(先创建task再运行容器)
ctr run -d docker.io/library/busybox:latest busybox-v1
# 查看容器
ctr c ls
# 查看task
ctr task ls # 在containerd中task才是真正跑容器的
# 进入容器
ctr task exec --exec-id 3118 -t busybox-v1 sh
# 删除容器
ctr task rm -f busybox-v1
ctr c ls
ctr c rm busybox-v1
# 给镜像打标签(如果v1版本存在的话,可以加上--force可以强制替换)
ctr i tag docker.io/library/busybox:latest docker.io/library/busybox:v1
# 删除容器
ctr task kill --signal 9 busybox-v1 # 停止task
ctr c del busybox-v1
ctr c ls
ctr tsak ls