docker数据卷

1、目的

复制代码
1、容器和宿主机之间数据共享------挂载卷------容器内的目录和宿主机的目录进行挂载,实现数据文件共享

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

2、如何实现

-v指定(volume)

复制代码
例:docker run -itd --name test1 -v /opt/test1:/opt/test2 centos:7 /bin/bash

注意事项:

复制代码
1、前面是宿主机目录,后面是容器内的目录

2、加不加斜杠都是命令,不是文件,如果不存在,宿主机和容器自动创建

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

4、挂载之后,容器内的目录的权限默认是读写权限都有

设置数据卷的只读权限:
docker run -itd --name test3 -v /opt/test3:/opt/test1:ro centos:7 /bin/bash

3、容器与容器之间进行数据共享

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

bash 复制代码
#容器内部创建目录
docker run -itd --name test1 -v /opt/test1 -v /opt/test2 centos:7 /bin/bash

#容器test2和容器test1进行挂载
docker run -itd --name test2 --volumes-from test1 centos:7 /bin/bash

4、容器互联

4.1概念

容器与容器之间建立一条专门的网络通道,容器与容器之间通过这个通道互相通信。

建立通道之后,容器之间可以通过容器名进行通信,容器之间不需要暴露端口,也不依赖宿主机的ip

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

4.2配置方法

bash 复制代码
老版本:
docker run -itd --name n1 nginx:1.22

docker run -itd --name n2 --link n1:n2 nginx:1.22

新版本:指定网段,要先创建自定义网络
#创建自定义网络
docker nework create --subnet=192.168.10.0/24 --opt "com.docker.network.bridge.name"="docker2" xy102

#查看所有网络设备
docker network ls

#查看网卡
ifconfig

#创建容器n11、n22
docker run -itd --name n11 --network=xy102 nginx:1.22

docker run -itd --name n22 --network=xy102 nginx:1.22

#进入容器访问n22
docker exec -it n11 bash
curl n22

#进入容器访问n11
docker exec -it n22 bash
curl n11

5、docker容器的资源控制

docker通过cgroup来控制容器的资源配额,包括cpu、内存、磁盘三大方面。

cgroup------control group

linux内核提供的可以限制、记录、隔离进程所使用的物理资源(cpu、内存、磁盘IO)的机制

5.1cpu资源控制

进程占用cpu的时间来计算

bash 复制代码
cd /sys/fs/cgroup/cpu/docker

cat cpu.cfs_quota_us

如果等于-1,表示系统对该进程进程cpu的限制

cat cpu.cfs_period_us

100000微秒=100毫秒,表示在每个使用cpu的周期内,容器可以用指定的比例使用cpu的时间
bash 复制代码
docker run -itd --name test1 -v /etc/yum.repos.d/:/etc/yum.repos.d/ centos:7 /bin/bash

docker exec -it test1 bash

yum -y install epel-release

yum -y install stress

top查看
docker top test1
pid:容器内的进程在宿主机上的进程号
ppid:在容器内部的进程号

#模拟cpu压力
stress -c 4

docker rm -f test1

docker run -itd --name test1 --cpu-quota 50000 -v /etc/yum.repos.d:/etc/yum.repos.d/ centos:7 /bin/bash

docker exec -it test1 bash

yum -y install epel-release

yum -y install stress

5.2设置cpu的资源占用比

bash 复制代码
--cpu-shares 默认值是1024,必须是1024的倍数

docker run -itd --name test1 --cpu-shares 512 centos:7 /bin/bash

5.3设置容器绑定cpu

bash 复制代码
--cpuset-cpus

绑定到cpu0:

docker run -itd --name test4 --cpuset-cpus 0 centos :7 /bin/bash

cpu的限制和绑定的cpu一般是一起使用的

5.4内存限制

bash 复制代码
--memory=

-m 数字+单位(小写)

例如:-m 512m

也可以限制容器使用交换空间swap

--memory-swap=512m/1g

-m 512m --memory-swap=1g
#表示内存限制是512m,交换空间限制的大小是1g-512m=512m

--memory-swap=0或者不加
#表示容器使用swap交换分区的大小是限制内存值的2倍

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

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

5.5磁盘读写速度的限制

磁盘的读次数限制和写次数限制

bash 复制代码
docker run -itd --name test6 --device-read-bps /dev/sda:1M centos:7 /bin/bash
#容器在磁盘上每秒只能读1M

docker run -itd --name test7 --device-write-bps /dev/sda:1M centos:7 /bin/bash
#容器在磁盘上每秒只能写1M

#清理容器的残留,删除停止运行的容器,删除无用的数据卷和网络
docker system prune -a
相关推荐
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy3 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩4 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵5 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1115 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽6 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康8 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn8611 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
程序员老赵11 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops