云原生系列(二)

简介: 云原生系列(二)

Docker的基础

①、k8s是Docker的分布式管理的基础设施

②、 Docker-Compose是单节点的Docker容器管理的组件或者是基础设施

③、 当然也可以用手工的方式进行Docker的容器的管理。

上面的三种不管是哪种都要掌握Docker容器的底层原理

docker相关的命令:

docker -v:查看docker版本的相关的命令

systemctl  start docker:启动docker容器

systemctl status docker:查看docker容器的状态

0c67e483d24ac08db37cc49aea0bd76b.png

docker  ps:验证docker是否可以使用

d3ad8c7264aa1df2e4b6519a185f36c4.png

容器相关的命令:

docker run centos:创建容器

e623872cec4df8cb5029a9b86373382c.png

docker ps -a:查看容器的状态

0d764e2940aaca919f0fdc98e2a1d968.png

docker stop id:停止容器

f813fcf682a93523c79c69ad29ef1829.png

docker rm id:删除容器

13100d58382b71108ffbc557b6ad55ae.png

docker top 容器名称:可以查看容器中正在运行的进程

5a85a0eacfbb49b1fb5dda81d7e2360c.png

docker ps --format "{{.Names}}":查找容器名称

074ff4cfa6968815f7511516f940bb5e.png

镜像相关的命令

docker image ls:docker镜像查看

32ea54e62c9d36948123568074e5fb79.png

常用的几种进入Docker容器的方法

①、使用docker attach

e8152ce0bd3a04c38ba039455363a9c1.png

使用该命令有一个问题:当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他的窗口也无法再进行操作,因为这个原因,所以dockerattach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。

②、使用SSH

在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装了ssh Server,这样就能保证多人进入。容器相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。但是使用了Docker容器之后不建议使用ssh进入到Docker容器内。

③、使用nsenter

1、什么是nsenter:

nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。util-linux是一个开放源码的软件包,是一个对任何Linux系统的基本面工具套件,含有一些标准Unix工具,如Login。util-linux软件包包含许多工具,其中比较重要的是加载,卸载,格式化,分区和管理硬盘驱动器,打开tty端口和得到内核消息。

2、nsenter用途:

进入容器的网络命令空间,相当多的容器为了轻量级,是不包含较为基础的命令的,比如说ip address,ping,telnet,ss,tcpdump等等命令,这就给调试容器网络带来相当大的困扰。只能通过docker inspect ContainerID命令获取到容器IP,以及无法测试和其他网络的连通性。这时就可以使用nsenter命令仅进入该容器的网络命名空间,使用宿主机的命令调试容器网络。

3、nsenter的使用:

nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程PID。可以使用docker inspect命令来拿到该进程的PID。

inspect命令可以分层级显示一个镜像或容器的信息。比如我们当前有一个正在运行的容器。可以使用docker inspect来查看该容器的详细信息

由于该信息非常多,此处只截取了其中一部分进行展示,如果要显示该容器的第一个进行的PID可以使用如下方式:

74a1583802c0a8dd53f93af6f3a75446.png

nsenter -target 上面查到的进程id  --mount --uts  --ipc --net --pid

解释下nsenter指令中进程id之后的参数的含义如下:

-mount:参数是进入到mount  namsespace中(文件系统)

-uts:参数是进入到uts namespace中(主机名与域名)

-ipc:参数是进入到 System V IPC namespace中(信号量,消息队列和共享内容)

-net:参数是进入到network namespace中(网络设备,网络线,端口)

-pid:参数是进入到pid namespace中(进程编号)

例如进入容器的network namespace中:这时看到ip变化了

22b0322cc2fd46f38bacb16e1b574816.png

nsenter查看docker的连接

由于使用Docker的时候,established连接不会出现在netstat中,在运行中的docker容器中列出打开的套接字的方法:

sudo docker inspect -f {{.State.Pid}}

查看连接:

ee88bd9c9ef8b667a5a96cfdc22a5eb3.png

④、使用exec

docker exec -it 容器id  /bin/bash

acddd9ac7b4f75f61fb1f3f936c823d8.png

在公司的实际开发当中。因为我们公司的网路是隔离的,所以进行镜像的导入和导出打Tag的操作。

Docker本地镜像载入与载出

两种办法:

①、保存镜像(保存镜像载入后获得跟原镜像id相同的镜像)

②、保存容器(保存容器载入后获得跟原镜像id不同的镜像)

拉取镜像

通过命令可以从镜像仓库中拉取镜像,默认从Docker Hub获取。

命令格式:docker image pull:

e986f2c7fb2e2c42c2aa7bfb9cfc4114.png

保存镜像:

docker save 镜像id -o /home/rancher-agent.tar

9022bab7271ab6cfa9e08471b9afdb98.png

载入镜像:

docker load -i /home/rancher-agent.tar

20b2b36ca64aef1f2cb1b79a4f9f9bdd.png

打个tag

1c0f2b31711bf1b76b1cdaddae7fcaa8.png

Docker,containerd,containerd-shim和runc之间的关系

a9dfe47583d006463b1f7a1b1606b22c.png

①、在上面的图里面都是进程:容器管理进程Docker Engine,和容器的进程runc

简单的理解每启动一个容器:会对应一组容器进程;

②、容器进程是由管理容器进程Docker Engine和containerd来管理的:为了不同

的容器厂商能够进行互操作,进行了剥离:把后台进程一分为二

Docker Engine负责接收客户端的命令解析客户端的命令;

③、containerd负责真正的容器管理进程:新的守护进程,符合标准的容器管理

OCI。dockerd和containerd两个后台进程通过标准化的协议grpc来进行通讯的,其

他的守护进程也可以使用,grpc和容器管理进程containerd进行通讯。可以做到不

同厂商的复用。

④、每个容器进程有两个进程:守护进程,很多时候我们的容器是在后端进行的,

所以有守护进程守护进程叫做:containerd-shim进程:为什么还要解耦出个进程,

因为要遵守OCI标准规范

⑤、runc:容器的启动进程,这个进程可以替换的,是完全遵守OCI的,而且在启动

的时候,这个代码是完全可以替换的。相当于containerd-shim是docker官方的,私

人的。容器启动进程和私有的通过shim做一个包装或者叫做隔离实现容器启动的兼

容性和替换性。

⑥、这两个进程负责容器的生命周期管理;runc这个进程创建完了容器之后,启动

完成之后就结束了所以看容器进程的时候是看不到runc,只能看到containerd-shim

进程。

⑦、容器的后台进程每个容器都有一个:容器进程树的父根,父进程;containerd-

shim

总体的架构:

eb70c1c436800ecc1f5737ee5425fc6f.png

docker-ctl:客户端命令 ->dockerd:后台守护进程解析 >containerd:容器的管理

--------exec ---->docker-shim ----exec----->runc:标准化的容器启动进程。

相关文章
|
Kubernetes Cloud Native Serverless
什么是云原生?聊聊云原生的前世今生
什么是云原生,云原生是在一个怎么样的背景下被提出来的,云原生和传统所说的云计算概念有什么不同?聊聊云原生的前世今生那些事。
2427 0
|
2天前
|
存储 负载均衡 Cloud Native
云原生系列(六)
云原生系列(六)
|
2天前
|
Kubernetes Cloud Native API
云原生系列(五)
云原生系列(五)
|
2天前
|
Kubernetes Cloud Native 安全
云原生系列(四)
云原生系列(四)
|
2天前
|
存储 Cloud Native Linux
云原生系列(三)
云原生系列(三)
|
2天前
|
Kubernetes Cloud Native API
云原生系列(七)
云原生系列(七)
|
2天前
|
Cloud Native 持续交付 Docker
云原生系列(一)
云原生系列(一)
|
2天前
|
Kubernetes Cloud Native API
云原生系列(十)
云原生系列(十)
|
4月前
|
Kubernetes 监控 Cloud Native
云原生与ChaosMeta
ChaosMeta是一款专为云原生环境和自动化演练设计的先进混沌工程平台。它源自蚂蚁集团内部广受认可的混沌工程平台XMonkey,并代表了蚂蚁集团在跨BU级别大规模红蓝攻防演练中多年来积累的丰富经验、技术能力和产品实践。作为XMonkey的开源版本,ChaosMeta凝结了蚂蚁集团稳定性团队在混沌工程领域的方法论以及经过复杂故障场景驱动下的独到见解。ChaosMeta不仅继承了XMonkey在多年混沌工程实践中的成熟技术和方法论,也体现了开放源代码的承诺,通过与全球开发者和专业人士的互动交流,ChaosMeta努力成为连接实际工程问题和前沿技术研究的桥梁。
84 0
|
11月前
|
运维 Cloud Native Devops
云原生应用的特点
云原生应用的特点