docker数据卷

容器和宿主机之间数据共享-----挂载卷-------容器内的目录和宿主机的目录进行挂载,以此实现数据文件共享

容器的生命周期有限,一旦重启,所有对容器内部文件数据的修改以及保存的数据都会被初始化,为了防止数据丢失,重要的组件一定会做数据卷.(为了保证数据持久化)

复制代码
挂载卷

docker run -itd --name test1 -v /opt/test1/:/opt/test1/ centos:7 /bin/bash

echo 123 > /opt/test1/123.txt

docker exec -it test1 bash

cd /opt/

ls

注意事项
-v	指定
volume

-v /opt/test1/ 是指定宿主机目录
:/opt/test1/ 是容器目录

加不加/都是目录,不是文件,如果目录不存在,宿主机和容器会自动创建目录

以宿主机的目录为准,同步的是宿主机目录的内容到容器内

挂载之后,容器内的目录的权限默认是读写权限都有,也可以设置为只读权限
docker run -itd --name test3 -v /opt/test3:/opt/test3:ro centos:7 /bin/bash

数据卷
容器和容器之间进行数据共享
容器之间会需要共享数据,最简单的方法就是使用数据卷容器,可以提供一个目录,专门用来

#创建共享数据卷的容器
docker run -itd --name test1 -v /opt/test1 centos:7 /bin/bash

#挂载数据容器的容器
docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash
docker run -itd --name test3 --volumes-from test1 centos:7 /bin/bash

#多开终端运行查看
docker exec -it test2 /bin/bash
cd /opt/
ls
docker exec -it test3 /bin/bash
cd /opt/
ls

容器互联

容器与容器之间建立一条专门用于网络的通道,容器与容器之间通过这个通道互相通信.建立通道之后,容器之间可以通过容器名进行通信,也不用暴露端口,也不依赖宿主机的ip

在容器内部可以通过容器名访问另一个容器,可以简化容器之间的连接配置.

复制代码
老版本的配置方法
docker run -itd --name n1 nginx:1.22
docker run -itd --name n2 --link n1:n2 nginx:1.22
docker exec -it n1 /bin/bash
n2可以curl访问n1

新版本的配置方法
要先创建自定义网络
docker netwrok 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 /bin/bash
curl n22
docker exec -it n22 /bin/bash
curl n11


#删除网卡,根据网卡name或者networkid
docker network ls
docker network rm mynetwork1

docker容器的资源控制

docker通过cgroup来控制容器的资源,包括cpu,内存,磁盘.主要是cpu和内存

cgroup即control gropus是linux内核提供的可以限制,记录,隔离进程所有使用的物理资源(cpu,内存,磁盘io)的机制

复制代码
docker run -itd --name test1 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash
docker exec -it test1 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4
#另一台终端
top
#会发现4个cpu都被占满了

1.对cpu资源控制:
#--cpu-quota 50000: 这个选项用于设置容器的 CPU 配额。50000 表示容器每秒最多可以使用 50,000 微秒(即 50 毫秒)的 CPU 时间
docker run -itd --name test2 --cpu-quota 50000 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash
docker exec -it test2 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

进程占用cpu的时间来进行计算
#开另外一个终端
docker top test1
pid是容器内的进程在宿主机上的进程号
ppid在容器内部的进程号
cat cpu.cfs_quota_us
#显示的内容是-1,表示系统没有对该进程进行cpu的限制
cat cpu.cfs_period_us
#表示在每个使用cpu的周期内,容器可以用指定的臂力使用cpu时间
#100000微秒,100毫秒
#50000微秒,占用cpu一半的时间,50毫秒


vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x cpu.sh
./cpu.sh

设置cpu的资源占用比

复制代码
#--cpu-shares 512: 这个选项用于设置容器的 CPU 份额。512 是一个相对值,表示容器相对于其他容器的 CPU 使用优先级。默认情况下,所有容器的 CPU 份额都是 1024。通过设置 CPU 份额,可以控制容器对 CPU 资源的使用。

docker run -itd --name test3 --cpu-shares 512 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash
docker exec -it test3 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

设置cpu使用哪个核

复制代码
#--cpuset-cpus 0,2: 这个选项用于设置容器可以使用的 CPU 核心。0,2 表示容器可以使用编号为 0 和 2 的 CPU 核心。通过设置 CPU 核心亲和性,可以控制容器对特定 CPU 核心的使用。

docker run -itd --name test4 --cpuset-cpus 0,2 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash
docker exec -it test4 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4

1、设置3个权重 256 768 2048,3个容器设置绑定到cpu 0

复制代码
docker run -itd --name test1 --cpu-shares 256 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash

docker run -itd --name test2 --cpu-shares 768 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash

docker run -itd --name test3 --cpu-shares 2048 --cpuset-cpus 0 -v /etc/yum.repos.d/:/etc/yum.repos.d centos:7 /bin/bash

docker stats

2.内存限制

复制代码
--memory=
-m 512m
-m 1g
单位是小写
也可以限制容器使用交换空间swap
--memeory-swap=512/1g

docker run -itd --name test2 --volumes-from test1 -m 512m --memory-swap=1g --net=host centos:7 /bin/bash 

-m 512m--memory-swap=512m
容器不能使用swap交换分区

-m 512m--memory-swap=-1
内存还是受限,512m,但使用交换分区不再受限,宿主机有多少swap空间,容器就有可以有多少

3.磁盘读写速度的限制,磁盘的读次数限制和写次数限制

复制代码
kb K
mb M
gb G
docker run -itd --name test3 --volumes-from test1 --device-read-bps /dev/sda:1M --net=host centos:7 /bin/bash 
docker run -itd --name test3 --volumes-from test1 --device-read-iops /dev/sda:1M --net=host centos:7 /bin/bash 

docker run -itd --name test3 --volumes-from test1 --device-write-bps /dev/sda:1M --net=host centos:7 /bin/bash 
docker run -itd --name test3 --volumes-from test1 --device-write-iops /dev/sda:1M --net=host centos:7 /bin/bash 

4.清理docker磁盘

复制代码
#清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络
docker system prune -a 
相关推荐
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉5 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造