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 
相关推荐
运维小文14 分钟前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻15 分钟前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
Mr_Xuhhh19 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
朝九晚五ฺ8 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe9 小时前
GitLab|数据迁移
运维·服务器·git
wuxingge9 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
久醉不在酒9 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
志凌海纳SmartX10 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总10 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿10 小时前
k8s 集群安装
云原生·容器·kubernetes