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 
相关推荐
codelife32112 分钟前
在Docker容器中执行命令
容器
神即道 道法自然 如来14 分钟前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins
petaexpress20 分钟前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
hanniuniu1329 分钟前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号42 分钟前
Prometheus 上手指南
linux·运维·centos·prometheus
m0_609000422 小时前
向日葵好用吗?4款稳定的远程控制软件推荐。
运维·服务器·网络·人工智能·远程工作
小安运维日记3 小时前
Linux云计算 |【第四阶段】NOSQL-DAY1
linux·运维·redis·sql·云计算·nosql
m0_741768857 小时前
使用docker的小例子
运维·docker·容器
学习3人组7 小时前
CentOS 中配置 OpenJDK以及多版本管理
linux·运维·centos
厨 神8 小时前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu