这个手刹不太灵儿

这个手刹不太灵儿

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
08-07 18:30