K8s 学习笔记——k8s 中的linux

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值