docker数据卷
容器和宿主机之间数据共享--------挂载卷---------容器内的目录和宿主机的目录进行挂载,实现数据文件共享
容器的生命周期有限,一旦重启,所有对容器内部文件数据的修改以及保存的数据都会被初始化,所以为了防止数据丢失,重要的组件一定会做数据卷
-v 指定
docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash
-v /opt/test1:/opt/test2
第一点:前面是宿主机目录,后面是容器内的目录
第二点:加不加斜杠,都是目录,不是文件,如果不存在,宿主机和容器自动创建
第三点:已宿主机的目录为标准,同步的事宿主机目录的内容到容器内
第四点:挂载之后,容器内的目录的权限默认是读写权限都有
ro 设置容器的只读模式
docker run -itd --name test2 -v /opt/test2:/opt/test1:ro centos:7 /bin/bash
容器与容器之间进行数据共享:
容器之间会需要共享数据,最简单的方式就是使用数据卷容器。可以提供容器内的一个目录,专门用来供其他容器进行挂载
docker run -itd --name test1 -v /opt/test1 -v /opt/test2 centos:7 /bin/bash
#-v /opt/test1 -v /opt/test2 不加:说明只在容器内部创建目录,不跟宿主机有任何的关联,只要是为了跟容器之间产生挂载
docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash
#容器test2与容器test1挂载,而不是与宿主机共享
容器互联:
容器与容器之间建立一条专门的网络通道,容器与容器之间通过这个通道互相通信
建立通信之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机的ip
在容器内部可以通过容器名直接访问另一个容器。简化容器之间的连接配置
老版本:
docker run -itd --name n1 nginx:1.22
docker run -itd --name n2 --link n1:n2 nginx:1.22
docker exec -it n2 bash
curl n1
老版本只能用n2curl n1,n1是不能跟n2通信
新版本:
指定网络,先创建自定义网络
docker network create --subnet=192.168.10.0/24 --opt "com.docker.network.bridge.name"="docker1" xy102
docker run -itd --name n1 --network=xy102 nginx:1.22
docker run -itd --name n2 --network=xy102 nginx:1.22
docker容器的资源控制:
docker通过cgroup来控制容器的资源配额。包括cpu,内存,磁盘。
docker stats
#监控正在运行的容器的 CPU、内存、网络 I/O、磁盘 I/O 和其他关键性能指标
control groups
linux内核提供的可以限制,记录,隔离进程所使用的物理资源(cpu,内存,磁盘io)的机制
1、cpu资源控制:
进程占用cpu的时间来进行计算
cd /sys/fs/cgroup/cpu/docker/
cat cpu.cfs_quota_us -1
表示系统没有对该进程进行cpu的限制
cat cpu.cfs_period_us
100000微秒 100毫秒
在每个使用cpu的周期内,容器可以用指定的比例使用cpu时间
2、设置cpu的资源占用比
–cpu-shares 默认值是1024,必须是1024的倍数
设置容器绑定cpu:
–cpuset-cpus 0,1
cpu的限制和绑定cpu一般是一起使用的。
内存的限制
-memory=
-m 512m
-m 1g
单位都是小写
也可以限制容器使用交换空间swap
–memory-swap=512m/1g
-memory 512m --memory-swap=1g
内存限制是512m
交换空间限制的大小是1g-512m=512m
–memory-swap=0或者不加
容器使用swap交换分区的大小是限制的内存值的两倍
-m 512m --memory-swap=512m
容器不能使用swap交换分区
-m 512m --memory-swap=-1
内存还是受限,交换分区不再受限,宿主机有多少swap空间,容器就可以用多少
磁盘读写速度的限制,磁盘的读次数限制和写次数限制
docker run -itd --name test6 --device-read-bps /dev/sda:1M centos:7 /bin/bash
容器在磁盘上每秒只能读1M
docker run -itd --name test6 --device-write-bps /dev/sda:1M centos:7 /bin/bash
容器在磁盘上每秒只能写1M
docker run -itd --name test6 --device-read-iops /dev/sda:100 centos:7 /bin/bash
容器在磁盘上只能读100次
docker run -itd --name test6 --device-write-iops /dev/sda:100 centos:7 /bin/bash
容器在磁盘上只能写100次
docker system prune -a
#清理容器的残留,删除停止运行的容器。删除无用的数据卷和网络