Docker数据卷和资源控制
一、数据卷
1、概念
容器和宿主机之间数据共享-------挂载卷------容器内的目录和宿主机的目录进行挂载,实现数据文件共享
容器生命周期有限,一旦重启所有对容器内部文件数据的修改以及保存的数据都会被初始化,所以为了防止数据丢失
重要的组件一定会做数据卷
2、挂载卷
-v 指定(volume)
docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash
# 前宿主,后容器;以宿主机为准。
# 在宿主机/opt/test1目录下创建文件,容器/opt/test2会同步
第一点:前宿主机目录,后容器目录
第二点:加不加斜杠都是目录。不是文件,如果不存在,宿主机和容器会自动创建
第三点:以宿主机的目的为标的,同步的是宿主机目录的内容到容器内
第四点:挂载之后,容器内的目录的权限默认是读写权限都有
3、容器和宿主机挂载
docker run -itd --name test3 -v /opt/test3:/opt/test1:ro centos7 /bin/bash # 容器设置只读
4、容器和容器挂载
共享数据,使用数据卷容器,可以提供容器内的一个目录,专门用来供其他容器进行挂载
docker run -itd --name test4 -v /opt/test4 -v /opt/test5 centos:7 /bin/bash
docker exec -it test1 bash
cd /opt
ls # test4 test5
docker run -itd --name test5 --volumes-from test4 centos:7 /bin/bash # 挂载目录
5、容器互联
docker run -itd --name test6 contos:7 /bin/bash
容器和容器之间建立一条专门的网络用的通道,容器和容器之间通过这个通道互相通信
建立这个通道之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机ip
在容器内部可以通过容器名,直接访问另一个容器,简化容器之间的连接配置
新版本:
指定网段,要先创建自定义网络
docker network create --subnet=192.168.10.0/24 --opt "com.docker.network.bridge.name"="docker2" xy102
docker run -itd --name n11 --network=xy102 nginx:1.22
docker run -itd --name n22 --network=xy102 nginx:1.22
docker exec -it n11 bash
curl n22
docker exec -it n22 bash
curl n11
二、资源控制
1、概念
docker通过cgroup来控制容器的资源配额,包括cpu、内存、磁盘三大方面。
cgroup:control cgroup 是linux内核提供的可以限制,记录,隔离进程所使用的物理资源(cpu、内存、磁盘IO)的机制
补充:
cat cpu.cfs_quota_us -1
:表示系统没有对该进程进行cpu限制
cat cpu.cfs_period_us 10000
(微秒~100毫秒):在每个使用cpu的周期内,容器可以用指定的比例使用cpu的时间
2、资源控制
1.1 cpu资源控制
进程占用cpu的时间来进行计算。
docker run -itd --name test10 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
docker exec -it test1 bash
yum -y install epel-release
yum -y install stress
再开一个终端
top # 动态查看cpu
原
stress -c 4 # 模拟4个cpu,4个共占50%
stress -c 1 # 1个占50%
exit
docker rm -f test1
# 资源限制
docker run -itd --name test1 --cpu-quota 50000 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash
docker exec -it test1 bash
yum -y install epel-release
yum -y install stress
stress -c 4
再开一个终端
top # 动态查看cpu
docker top test1 # 静态查看cpu
# pid 表示容器在宿主机上的进程号,ppid表示在容器内部的进程号
1.2 设置cpu的资源占用比
–cpu-shares 默认值是1024,必须是1024的倍数
docker run -itd --name test2 --cpu-shares 512 centos:7 /bin/bash
docker exec -it test2 bash
yum -y install stress
设置容器绑定cpu:
--cpuset-cpus 0,1
docker run -itd --name test2 --cpuset-cpus 0,1 centos:7 /bin/bash
cpu的限制(资源占用比)和绑定cpu一般是一起使用
1.3 内存限制
–memory=
-m 数字
-m 512m
-m 1g
也可以限制容器使用交换空间swap
–memory-swap=512m/1g
内存限制是512m。
交换空间限制的大小是1g-512m=512m
–memory-swap=0或者不加
容器使用swap交换分区的大小是限制内存值的两倍
-m 512m --memory-swap=512m
容器不能使用swap交换分区
-m 512m --memory-swap=-1
内存还是首先512m,使用交换分区不再受限制,宿主机有多少swap空间,容器就可以用多少
stress --vm 2 --vm-bytes 512m --vm-hang 0
# 模拟两个进程,分别占用内存大小是512
1.4 磁盘限制
磁盘读写速度的限制,磁盘的读次数限制和写次数的限制
docker run -itd --name test6
容器在磁盘上每秒只能读1M
容器在磁盘上每秒只能写1M
1.5 对磁盘空间清理
docker system prune -a
# 清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络