Docker基础

一、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
相关推荐
MIXLLRED1 小时前
随笔——在 Ubuntu 22.04 中查看 Markdown (.md) 文件
linux·运维·ubuntu·markdown
STDD1 小时前
Linux cgroup v2 资源控制实战:限制进程 CPU/内存/IO,systemd slice 管理
linux·运维·服务器
Latticy1 小时前
内网渗透-横向移动-密码喷洒攻击和域内用(kerbrute使用)
运维·服务器·网络·内网渗透·内网
devilnumber2 小时前
Kubernetes(K8s)重要知识点复习与记录
云原生·容器·kubernetes
元直数字电路验证2 小时前
云计算实验笔记(四):容器编排(Container Orchestration)
运维·笔记·docker·云计算
kukubuzai2 小时前
Docker Note
linux·运维·docker
惜年_night2 小时前
Docker部署05-GitLab的CI-CD发布
ci/cd·docker·gitlab
大貔貅喝啤酒3 小时前
pip 国内镜像源大全【测试 / 自动化开发常备】
运维·自动化·pip·国内镜像源
hj2862513 小时前
Linux网络基础一
linux·运维