Docker基础
实际的服务器或计算机。:通过虚拟技术将一台计算机虚拟为多台逻辑计算机。(就是安装的Ubuntu、CentOS之类的的操作系统):操作层虚拟化,将操作系统内核虚拟化。
一、Docker简介
1、什么是虚拟化、容器化
物理机:实际的服务器或计算机。
虚拟化:通过虚拟技术将一台计算机虚拟为多台逻辑计算机。(就是安装的Ubuntu、CentOS之类的的操作系统)
容器化:操作层虚拟化,将操作系统内核虚拟化。
2、为什么要虚拟化、容器化
资源利用率高、环境标准化、资源弹性伸缩、差异化环境提供、沙箱安全、维护和扩展容易、容器对比虚拟机更清亮而且启动更快
3、虚拟化实现方式
3.1应用程序执行环境分层
从上到下:应用程序层、函数库层、操作系统层、硬件层
3.2虚拟化常见类别
虚拟机:伪造硬件接口
容器:伪造操作系统的接口
JVM:伪造函数库层、应用程序层的api
3.3常见虚拟化实现
3.3.1主机虚拟化实现
在物理服务器上安装一个虚拟化层来实现,这个虚拟化层通常由一个软件来实现(Xen、Vmware;后者需要通过Host OS)
3.3.2容器虚拟化实现
原理:操作系统层的虚拟化,通过namespace进行各程序的隔离,用cgroups进行资源的控制。
NameSpace:命名空间,用来隔离内核资源。让一些进程只能看到与自己相关的一部分资源,另外一些进程也只能看到与自己相关的一部分资源,且这些资源互相感知不到对方的存在。
NameSpace隔离实战
1、dd命令
用于读取、转换、输出数据
dd option
生成固定大小的测试文件
mkdir -p /data/maxhou/testns
cd /data/maxhou/testns/
dir
ls -l
dd if=/dev/zero of=test.img bs=8k count=1024
ll -h
dd if=/dev/zero of=test2.img bs=8k count=10240
ll -h

文件大小写转换
vi in.txt
dd if=in.txt of=out.txt conv=ucase
cat in.txt
cat out.txt

2、mkfs命令
在设备上创建LInux文件系统,即格式化。
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
格式化dd命令创建的镜像文件
mkfs -t ext4 ./test.img

3、df命令
显示目前在LInux系统上的文件系统磁盘使用情况
df [option]... [file]...
| 参数 | 全称 | 作用 | 示例 |
|---|---|---|---|
| -h | --human-readable | 人性化显示(KB/MB/GB),最常用 | df -h 查看所有挂载点空间 |
| -T | --print-type | 显示文件系统类型(ext4/xfs 等) | df -hT 查看类型 + 空间 |
| -i | --inodes | 显示 inode 使用情况(文件数限制) | df -hi 查看 inode 占用 |
| -a | --all | 显示所有文件系统(含伪文件系统) | df -a 查看完整列表 |
| -l | --local | 仅显示本地文件系统(过滤网络挂载) | df -hl 只看本地磁盘 |
4、mount命令
把文件系统加载到指定的加载点,常用于挂载光盘,使能够方位光盘中的数据。直接将光盘插入光驱中,LInux并不会自动挂载,必须使用LInux mount命令手动挂载。
mount [-l]
mount [-t vfstype] [-o options] device dir
挂载实战
ll
mkfs -t ext4 ./test.img
mkdir -p /data/testmymount
ll /data/testmymount/ #查看新建文件夹中的内容
mount ./test.img /data/testmymount #把文件挂载到目录中
df -h
cd /data/testmymount/
echo "123" >test.txt
ll -h
cat test.txt


5、unshare命令
使用与父进程不共享的名称空间运行程序
unshare [options] program [arguments]
| 参数 | 全称 | 隔离内容 | 适用场景 | 示例 |
|---|---|---|---|---|
| -m/--mount[=file] | mount namespace | 文件系统挂载点 | 隔离磁盘挂载,如测试分区 | unshare -m --mount-proc bash |
| -u/--uts[=file] | UTS namespace | 主机名、域名 | 修改主机名不影响主机 | unshare -u hostname test-ns |
| -i/--ipc[=file] | IPC namespace | 消息队列、共享内存 | 隔离进程间通信 | unshare -i ipcmk -Q |
| -n/--net[=file] | network namespace | 网络设备、IP、端口 | 测试网络配置,模拟独立主机 | unshare -n ping 127.0.0.1 |
| -p/--pid[=file] | PID namespace | 进程 ID 编号空间 | 隔离进程树,新 PID 从 1 开始 | unshare -pf --mount-proc bash |
| -U/--user[=file] | user namespace | 用户 / 组 ID 映射 | 非 root 用户获得隔离环境中的 root 权限 | unshare -Ur bash |
| -C/--cgroup[=file] | cgroup namespace | 控制组资源限制 | 隔离资源限制策略 | unshare -C systemd-run --scope sleep 10 |
| -T/--time[=file] | time namespace | 系统时间 | 隔离时间设置,测试时间敏感程序 | unshare -T date -s "2023-01-01" |
实操hostname隔离
unshare -u /bin/bash
hostname test1
hostname
6、实操——PID隔离
unshare --fork --pid --mount-proc /bin/bash
7、实操——Mount隔离
unshare --mount --fork /bin/bash
dd if=/dev/zero of=data2.img bs=8k count=10240
cgroups隔离实战
Control Groups是LInux内核提供的一种机制。本质上来说,cgroups是内核附加在程序上的一系列钩子,通过程序运行时对资源的调度触发相应的钩子以达到资源追踪和限制的目的。
1、pidstat
用于监控全部或指定的进程的CPU、内存、线程、设备IO等系统资源的占用情况。
pidstat [选项] [<时间间隔>] [<次数>]
Ubuntu上的安装和卸载
#卸载
apt remove sysstat -y
#安装
apt install sysstat -y




2、stress
是LInux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。
stress [OPTION [ARG]]
Ubuntu上的安装和卸载
#卸载
apt remove stress -y
#安装
apt install stress -y


3、实操——cgroups信息查看
(1)cgroups版本查看
cat /etc/*release*
cat /proc/filesystems |grep cg

(2)cgroups子系统查看
cat /proc/cgroups

(3)cgroups挂载信息查看
mount |grep cgroup

4、实操——使用cgroups对内存进行控制
#创建控制组
mount |grep cg
ll /sys/fs/cgroup/memory
mkdir test_memlimit
ls -l
#限制内存
echo "20971520" > memory.limit_in_bytes
5、实操——使用cgroups对cpu进行控制
#创建CPU控制组
mount |grep cg
cd /sys/fs/cgroup/cpu
mkdir test_cpu
cd test_cpu/
ls -l
#创建stress进程,通过pidstat进行监控
#对控制组做CPU使用率的限制
#把pid挪到控制组
LXC隔离实战
LInux Containers,一种操作系统层虚拟化技术,是LInux内核容器功能的一个用户空间接口。
Ubuntu上的卸载和安装
#检查是否安装,清理资源
#卸载软件
#检查服务已经没有该服务了
#安装
1、lxc-checkconfig
检查系统环境是否满足容器使用要求
lxc-checkconfig

2、lxc-create
创建lxc容器
lxc-create -n NAME -t TEMPLATE_NAME [--template-options]
3、lxc-start
启动容器
lxc-start -n NAME -d
4、lxc-ls
列出所有容器
lxc-ls *f
5、lxc-info
查看容器的相关信息
lxc-info -n NAME
6、lxc-attach
进入容器执行命令
lxc-attach --name=NAME [--COMMAND]
7、lxc-stop
停止容器
lxc-stop -n NAME
8、lxc-destory
删除处于停机状态的容器
lxc-destroy -n NAME
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)