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 
相关推荐
喝醉酒的小白10 分钟前
几种K8s运维管理平台对比说明
运维·容器·kubernetes
明 庭43 分钟前
通过 Docker 部署 pSQL 服务器的教程
服务器·docker·容器
字节全栈_kYu1 小时前
FastDFS实用笔记 (Docker 搭建环境 + 整合 SpringBoot)
spring boot·笔记·docker
破-风4 小时前
linux的用法
linux·运维·服务器
大耳朵土土垚8 小时前
【Linux】日志设计模式与实现
linux·运维·设计模式
学问小小谢8 小时前
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
运维·服务器·前端·网络·学习·安全
yaoxin5211239 小时前
第十二章 I 开头的术语
运维·服务器
ProgramHan9 小时前
1992-2025年中国计算机发展状况:服务器、电脑端与移动端的演进
运维·服务器·电脑
马立杰12 小时前
H3CNE-33-BGP
运维·网络·h3cne
Linux运维老纪12 小时前
DNS缓存详解(DNS Cache Detailed Explanation)
计算机网络·缓存·云原生·容器·kubernetes·云计算·运维开发