K8s 学习笔记——k8s 中的linux
文章目录K8s 中的linuxnamespacedocker 的隔离性是如何实现的docker 网络模式不同network namespace 如何通信K8s 中的linuxnamespacepid 为1的进程,系统的创始进程。 每创建一个进程pid的值就会往上增长。 但linux 中并不是只有一个pid 为1 的进程。因为linux 中有namespace的概念。不同namespace 中的的进
docker 常用命令总结
docker 基本组成:
镜像 image: 一个镜像可以创建很多容器
容器 container: Docker 利用容器独立运行一个或一组应用。
仓库 repository: 公开仓库 和私有仓库
docker version 查看docker 的版本信息
docker info 显示Docker 系统信息,包括镜像和容器数
镜像命令
1 docker images 列出本地主机上的镜像 -a 列出所有镜像 --digests 显示镜像的摘要信息 --no-trunc 显示完整的镜像信息
2 docker search 从仓库中搜索指定的镜像
docker serarch -s 10 tomcat
–no-trunc:显示完整的镜像描述
-s:列出收藏数不小于指定值的镜像
–automated:只列出 automated build类型的镜像
3 docker rmi -f 删除镜像
docker rmi -f 镜像ID
删除单个镜像docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除多个docker rmi -f $(docker images -qa)
删除全部
4 docker pull 下载镜像
- docker pull tomcat
容器命令
1 docker run [option] image [command] 新建并启动容器
举例:
docker run -it centos /bin/bash
使用镜像 centos:latest 以交互模式启动一个容器,在容器内执行/bin/bash命令。
–name=“容器新名字”: 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射;
2 docker ps 列出当前所有正在运行的容器
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
–no-trunc:不截断输出
3 退出容器: 两种退出方式: exit 容器停止退出 , ctrl+p+q 容器不停止退出
4 容器启动停止命令:
- 启动容器:
docker start
容器ID或者容器名 - 重启容器:
docker restart
容器ID或者容器名 - 停止容器:
docker stop
容器ID或者容器名 - 强制停止容器:
docker kill
容器ID或者容器名
5 删除已停止的容器
删除单个容器 :docker rm 容器ID
删除多个容器: docker rm -f $(docker ps -a -q)
重要的容器命令
1 docker run -d 容器名 启动守护式容器
容器运行的命令如果不是那些一直挂起的命令,比如说top,tail ,就是会自动退出。
-d 允许后台运行
2 docker logs -f -t --tail 容器IDdocker logs -f -t --tail 容器ID 获取容器的日志
-t:是加入时间戳
-f:跟随最新的日志打印
–tail:数字显示最后多少条
3 docker top 容器ID
查看容器内运行的进程
4 docker inspect 容器ID
查看容器内部细节
5 进入正在运行的容器并以命令行交互
-
docker exec -it 容器ID bashShell
在容器中打开新的终端,并且可以启动新的进程docker exec -it 2ff3dfs ls -l /tmp
docker attach 容器ID
直接进入容器终端的命令,不会启动新的进程
6 docker cp 容器ID:容器内路径 目标主机路径
从容器内拷贝文件到主机上
K8s 中的linux
name space
pid 为1的进程,系统的创始进程。 每创建一个进程pid的值就会往上增长。 但linux 中并不是只有一个pid 为1 的进程。因为linux 中有namespace的概念。不同namespace 中的的进程是独立的。
linux namespace 机制提供了一种资源隔离和虚拟化的特性,PID,IPC,Network 等系统资源不再是全局性的了。而是属于某个特定的namspace.。 每个namespace 的资源对于其他namespace 的资源是不可见的。因此在操作系统的层面,就会出现多个相同的pid 的进程。
这六种namespace 是实现容器必须的隔离技术,最近新增 Cgroup namespace(cgroup root directory cgroup 的根目录)
lsns
lsns 命令查看系统中所有的namespace 以及其类型。
查看init 进程中相关的namespace。
lsns | grep init
通过namespace 对系统中的七种资源进行了隔离,如果两个进程所属的某一类资源的namespace 是一样的,则会共享该资源,否则则是隔离的。如果两个进程所属的network 的namespace 是一样,则两个进程是可以直接通信的,因为其共享同一套网络协议栈。
上图中,两个进程。共享mnt 和pod namespace。
docker 的隔离特性就是通过linux namespace 机制来实现的。
docker 的隔离性是如何实现的
系统原有使用lsns 命令并保存,和使用docker 启动一个ubtuntu /bin/sh 再次使用l sns命令 进行对比。
docker 命令:
docker run -it ubuntu:18.04 /bin/bash
发现docker 进程多了5类/bin/bash 的namespace,分别为mnt(文件系统),uts(主机名与域名),ipc( 通讯),pid(进程),net(网络)。bash 系统这5类资源与系统进行了隔离。
docker 网络模式
我们通过docker run 创建docker 容器时,可以使用–net 来指定容器的网络模式。Docker 有以下四种网络模式。没有指定默认为bridge 模式。
host 模式,ifconfig的输出是一样的。
不同network namespace 如何通信
同一个network namespace 的机器都可以看到 lo 设备,lo设备对应的地址为127.0.0.1 。 机器可以通过lo 设备的网络接口实现之间的网络通信。
不同network namespace 如何通信,借用了内核里面的虚拟网络设备,和内核内的虚拟网桥设备机制。
docekr0 是在宿主机安装docker 时创建的虚拟网桥设备。
使用桥接网络模式启动一个docker 容器时,使用ipconfig 会发现多出了一个veth* 设备。进入docker 中ifconfig会发现多出了etho 设备。
参考视频地址: https://space.bilibili.com/646178510?spm_id_from=333.788.b_765f7570696e666f.1
更多推荐
所有评论(0)