docker1

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

前言

技术架构


单机架构


应用数据分离架构


应用服务集群架构





读写分离/主从分离架构



写入主的时候,要同步Mysql从的数据才可以
冷热分离架构



写的时候要写入主和缓存数据库
读的时候先去缓存看有没有,没有的话就去从数据库读数据
主要就是看这个数据是冷门的还是热门的了
缓存数据库就是redis

这个热点的返回数据非常快
缺点就是万一一个表数据太多了,有千万级别,那么一个数据库存的数据就太多了
垂直分库架构


就是分库分表

可以用mycat,tddl来分库分表



我们可以直接用分布式数据库了

最下面的都是集群的东西
数据库都采用了集群化
缺点就是:我们改代码的时候就要停服,重新发布版本
微服务架构







容器编排架构



容器与容器之间不会辩论



如果没有k8s的话,就会布置许多微服务,要把jar包布置6份
有k8s,直接一键式布置这6个微服务,只必要一份,就可以一键式
不然就要慢慢布置了



实战架构


Docker使用

容器技术发展史

jail时代
云时代
云:分布式的
隔离已经用Linux实现了
资源隔离
办理海量数据处置处罚
云原生时代:k8s,docker

虚拟化与容器化

笔记本电脑就是物理机
一台操作系统上装了许多操作系统就是虚拟化
虚拟化出来的叫做虚拟机
容器化:就是虚拟的软件层,操作系统的虚拟化,虚拟化的一种
docker是容器化的一种
虚拟化容器化优点:资源利用率高,因为划的很细
情况划一性
资源可以弹性收缩
物理机上可以装差别的操作系统,情况差别
容器比虚拟机启动更快
docker不必要虚拟内核,相当于不用开机了
而且很容易维护和扩展

应用程序实行情况分层
容器是虚拟化的操作系统
虚拟化常见类别
:虚拟机:伪造的硬件层
:JVM:伪造应用程序层和函数库层
常见虚拟化实现:
主机虚拟化实现:模仿了全部的硬件
容器虚拟化实现


这就是主机虚拟化
就是在物理服务器上安装了一个软件,一个虚拟化层,变成可视化的了
容器虚拟化实现

实现原理:操作系统层的虚拟化

容器是轻量级的
而且容器之间是不影响的
资源之间是隔离的
Namespace


可以只让A进程只看到A的资源,B进程只看到B的资源

这些就是隔离的内核资源
意思就是就算是两个进程运行在同一个主机上,但是可以有差别的主机名和域名
两个进程看到的都是80端口
但是却不是同一个端口

NameSpace实战根本知识

dd命令



if=文件名 ------》输入文件名
of=文件名 ------》输出文件名



sync:将每个输入块填充到ibs个字节,不足部分用空NUL字符补齐

生成镜像文件

我们这个是输入文件
dev/zero是系统的一个特别的文件设备,它会连续不绝地产生空白字符流

生成一个空白的镜像文件
bs就是指定大小
count就是产生文件数量


如许我们就产生了空白的文件
加上 -h 选项后,文件大小会以更直观的单位(如 KB、MB、GB 等)来展示

如许就生成了80M的文件
转换为大写

dd if=in.txt of=out.txt conv=ucase

dd就是完成一个读取转换输出的操作
mkfs

用于在设备上创建Linux文件系统,俗称格式化,好比我们使用 U盘的时候可以格式化。
语法
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
• 参数
-t fstype:指定要建立何种文件系统;如ext3,ext4 —》磁盘类型ext4 用的比较多
filesys :指定要创建的文件系统对应的设备文件名;
blocks:指定文件系统的磁盘块数。 -V : 具体表现模式
fs-options:传递给具体的文件系统的参数
-v 表现表现详情
• 实例
#将sda6 分区格式化为ext4格式
mkfs -t ext4 /dev/sda6
#格式化镜像文件为ext4
mkfs -t ext4 ./fdimage.img
把我们镜像的文件格式化为磁盘
mkfs -t ext4 ./test.img

如许就完成了
这个命令就是把硬盘u盘或者空白文件格式化
就是创建了一个指定的Linux文件系统
df

df 命令详解
Linux df(英文全拼:disk free) 命令用于表现目前在 Linux 系统上的文件系统磁盘使
用情况统计。
• 语法
df [OPTION]… [FILE]…----》看这个目次的文件占有情况
• 常见参数
○ -a, --all 包罗全部的具有 0 Blocks 的文件系统
○ -h, --human-readable 使用人类可读的格式(预设值是不加这个选项的…)
○ -H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
○ -t, --type=TYPE 限制列出文件系统的 TYPE
○ -T, --print-type 表现文件系统的形式
• 案例
#查看磁盘使用情况
df -h
#查看磁盘的系统类型
df -Th




指定要ext4类型的

打印了类型
df -T /data
如许就是指定目次下的文件系统的具体信息

H与h就是容量的单位变了
mount

mount 命令详解
mount 命令用于加载文件系统到指定的加载点(相当于查u盘的时候,添加了一个盘,windows是自动挂载上去的)。此命令的也常用于挂载光盘,使我们
可以访问光盘中的数据,因为你将光盘插入光驱中,Linux 并不会自动挂载,必须使用
Linux mount 命令来手动完成挂载。
Linux 系统下差别目次可以挂载差别分区和磁盘设备,它的目次和磁盘分区是分离的,
可以自由组合(通过挂载)
差别的目次数据可以跨越差别的磁盘分区或者差别的磁盘设备。
挂载的实质是为磁盘添加入口(挂载点)。
• mount 常见用法
mount [-l]
mount [-t vfstype] [-o options] device dir
• 常见参数
-l:表现已加载的文件系统列表;
-t: 加载文件系统类型支持常见系统类型的 ext3,ext4,iso9660,tmpfs,xfs 等,大部分情况
可以不指定,mount 可以自己识别
-o options 主要用来形貌设备或档案的挂接方式。
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
device: 要挂接(mount)的设备。就是u盘的文件系统,相当于u盘
dir: 挂载点的目次,挂在哪个目次下面,挂载u盘的地方
• 案例
#将 /dev/hda1 挂在 /mnt 之下。
mount /dev/hda1 /mnt
#将镜像挂载到/mnt/testext4 下面,必要确保挂载点也就是目次存在
mkdir -p /mnt/testext4
mount ./fdimage.img /mnt/testext4
挂载之前必要一个文件系统,就是磁盘

我们可以格式化一下test.img

这个问的是已经有了一个ext4的文件系统
如许就格式化成功了
如许就是一个空白的文件系统了
就可以挂载了
挂载到某个目次就要先创建这个目次

mount ./test.img /data/testmymount/
这个就是把./test.img挂载到/data/testmymount/

df -h就可以查看了

如许我们就把一个空白的镜像文件,挂载成了一个磁盘
然后这个磁盘可以正常的读写
unshare

unshare 命令详解
unshare 主要能力是使用与父程序不共享的名称空间运行程序。就是不共享Namespace
• 语法
unshare [options] program [arguments]
program 是具体的程序–》与父程序不共享命名空间
options是参数
• 常用参数
参数 含义
-i, --ipc 不共享 IPC 空间,进程间通信
-m, --mount 不共享 Mount 空间,文件系统
-n, --net 不共享 Net 空间,网络
-p, --pid 不共享 PID 空间,进程
-u, --uts 不共享 UTS 空间,主机名,网络名
-U, --user 不共享用户,用户信息
-V, --version 版本查看,
–fork 实行 unshare 的进程 fork 一个新的子进程,在子进
程里实行 unshare 传入的参数。启动一个新的子进程,而不是让如今这个进程作为父进程
–mount-proc 实行子进程前,将 proc 目次优先挂载已往

proc 目次下有许多进程,不写这个的话就会看到proc下的全部进程信息
• 案例
#hostname 隔离
root@139-159-150-152:~# unshare -u /bin/bash
root@139-159-150-152:~# hostname test1
root@139-159-150-152:~# hostname
test1
root@139-159-150-152:~# exit
exit
root@139-159-150-152:~# hostname
139-159-150-152
root@139-159-150-152:
我们用的主机隔离
unshare -u /bin/bash

bash是一个程序
如今已经进入了一个子进程的命令空间了
hostname test1
指定主机名

这个是查看主机名
我们在启动一个xshell

可以看到主机名不是新的

这里退出的是子进程

我们发现名字又变归去了
注意如果要表现ip的话
就是要写hostname -I
以是unshare就是做到了命名空间的隔离
PID隔离


  • 在主机上实行 ps -ef,可以看到进程列表如下,其中启动进程 PID 1 为 init 进程
  • 我们打开别的一个 shell ,实行下面命令创建一个 bash 进程,而且新建一个 PID
    Namespace:
    –fork 新建了一个 bash 进程,是因为如果不建新进程,新的 namespace 会用 unshare
    的 PID 作为新的空间的父进程,而这个 unshare 进程并不在新的 namespace 中,所
    以会报个错 Cannot allocate memory
    –pid 表现我们的进程隔离的是 pid,而其他命名空间没有隔离
    mount-proc 是因为 Linux 下的每个进程都有一个对应的 /proc/PID 目次,该目次包罗
    了大量的有关当前进程的信息。 对一个 PID namespace 而言,/proc 目次只包罗当前
    namespace 和它全部子孙后代 namespace 里的进程的信息。创建一个新的 PID
    namespace 后,如果想让子进程中的 top、ps 等依赖 /proc 文件系统的命令工作,还
    必要挂载 /proc 文件系统。而文件系统隔离是 mount namespace 管理的,以是 linux
    特意提供了一个选项–mount-proc 来办理这个问题。如果不带这个我们看到的进程还
    是系统的进程信息。
    Shell
    unshare --fork --pid --mount-proc /bin/bash
  • 实行 ps -ef 查看进程信息,我们可以看到此时进程空间内的内容已经变了,而且
    启动进程也变成了我们的 bash 进程。说明我们已经看不到主机上的进程空间了,我们
    的进程空间发生了隔离。
    4.实行 exit 退出进程

这里报了一个错
因为我们这里的父进程是shell,它有PID
shell内部新启动的bash进程,看不见shell的信息,因为PID已经发生了隔离,因为是shell
以是bash启动的时候,没有自己的父进程,因为已经隔离了,就会报这个错
如果要正常运行的话,就要床加你一个全新的进程
加一个参数,让你和启动你的这个进程没有什么关系
先exit退出

unshare -p --fork /bin/bash
如许就完成了PID的隔离了
接下来我们来看我们启动的新进程和我们宿主机上的进程是否一样
启动的新进程就是bash
我们再打开另一个xshell
两个均实行ps-ef


我们可以发现进程是一样的说明进程并没有隔离
因为proc目次下有许多进程的PID
实行ps -ef的时候
全部都列了出来
这时候就要用–mount-proc这个了
这个就是实行子进程前,先把proc目次挂载在已往
挂载已往之后,我们的proc目次就没有这些现有的信息了
再次exit
unshare -p --fork --mount-proc /bin/bash

可以发现如今的proc目次下的进程id就很少了
原来的是许多的
如今在实行ps -ef


看的PID为一的就是我们自己指定的程序
如许就实现了PID的隔离
-p表现隔离pid
–fork表现我们要启动新的一个进程
Mount 隔离


  • 打开第一个 shell 窗口 A,实行命令, df -h ,查看主机默认命名空间的磁盘挂载情

  • 打开一个新的 shell 窗口 B,实行 Mount 隔离命令
  • 在窗口 B 中添加新的磁盘挂载
  • 在窗口 B 挂载的磁盘中添加文件
  • 查看窗口 B 中的磁盘挂载信息
  • 查看窗口 A 中的磁盘挂载信息
  • 查看窗口 B 中的文件信息
  • 查看窗口 A 中的文件信息,可以看到窗口 B 中新建的文件和磁盘挂载在主机的窗
    口中并没有,说明我们实现了文件系统隔离。
  • 窗口 B 实行 exit,退出
我们先创建一个mount隔离的进程
unshare --mount --fork /bin/bash
在进程内里创建一个空白文件
dd if=/dev/zero of=data2.img bs=8k count=10240

然后挂载为一个磁盘–》挂载点
先格式化
mkfs -t ext4 ./data2.img

然后就是挂载了

这是我们全部的挂载点
挂载之前我们还要先指定我们挂在点目次
mkdir -p /data/maxhou/data2mount
然后开始挂载
mount -t ext4 ./data2.img /data/maxhou/data2mount/

如许就挂载成功了
df -h

如许就说明白我们完成了data2mount的挂载点的创建了
然后我们在外面能不能看见这个挂载点
df -h

这个就说明白我们创建的挂载点在外面是看不到的,这就是mount隔离
我们在这个挂载点内里写文件
外面都看不见的


可以发现文件根本找不到,但是目次确实可以找到的
这个磁盘的挂载点也是看不见的
往内里放文件别人就看不见了
删除挂载点

使用 umount 命令
语法格式:umount [选项] 挂载点或umount [选项] 设备。例如要卸载/mnt/data这个挂载点,可以实行umount /mnt/data。如果知道挂载的设备,也可以使用umount /dev/sdb1来卸载,前提是/dev/sdb1对应的挂载点没有被其他进程占用。
常用选项
-l:lazy unmount,即耽误卸载。如果设备忙,它会将卸载操作推迟到设备不再忙的时候。
-f:强制卸载,一样平常在正常卸载失败时使用,但可能会导致数据丢失或文件系统损坏,需审慎使用。

值得注意的就是,这个挂载点是从根目次开始设置的
与当前所在文件没有关系

当你在实行 rm -fr data 命令时遇到 rm: cannot remove ‘data/testmymount’: Device or resource busy 错误,这表明 data/testmymount 是一个挂载点,而且当前有进程正在使用该挂载点上的资源,以是无法直接删除它。你可以按照以下步骤办理这个问题:

  • 确定挂载信息
    使用 mount 命令查看系统的挂载信息,确认 data/testmymount 是否为挂载点以及挂载的设备。
    mount | grep data/testmymount
    这个命令会过滤出与 data/testmymount 相干的挂载信息,你可以从中相识到挂载的设备(例如 /dev/sdb1)等具体内容。
  • 找出占用挂载点的进程
    使用 lsof 命令找出正在使用该挂载点的进程:
    lsof +D data/testmymount
    该命令会列出全部正在访问 data/testmymount 目次及其子目次的进程。你会看到输出中包罗进程的 PID(进程 ID)、进程名等信息。
  • 停止占用挂载点的进程
    根据上一步得到的 PID,使用 kill 命令停止这些进程。例如,如果 PID 为 1234 的进程正在占用挂载点,你可以实行:
    kill 1234
    如果该进程无法正常停止,可以使用强制停止的方式:
    kill -9 1234
    不外,使用 -9 选项强制停止进程可能会导致数据丢失或其他问题,以是要审慎使用。
  • 卸载挂载点
    在停止全部占用挂载点的进程后,使用 umount 命令卸载挂载点:
    umount data/testmymount
如果卸载时仍然提示设备忙,可以尝试使用 umount -l 举行耽误卸载:
umount -l data/testmymount
-l 选项会将卸载操作推迟到挂载点不再被使用时实行。
5. 删除目次
在成功卸载挂载点后,你就可以安全地删除 data 目次了:
rm -fr data
通过以上步骤,你应该可以大概办理因挂载点被占用而无法删除目次的问题。
总结


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表