第5节 Docker配置优化
docker 工作是基于镜像,而镜像存储的驱动,通过docker info可见是overlay2。
这些存储引擎不管是那种,都是联合文件系统
比如ext4 xfs的文件系统,磁盘挂载到目录,是不可以重复挂载的,也就是一个目录你两个硬盘挂载的时候,前面一个就被顶掉了。
而docker的联合文件系统时可以把多个设备(所谓设备就是硬盘、分区、lvm这些)挂载到一个目录下,其效果就是这个目录下既可以看到设备1上的数据,也能看到设备2上的数据。
为什么可以采用联合文件系统,就是因为docker的image是多层镜像。
image是一层层构建出来的
容器生成,是复制一份镜像,并在其上又添加了一层writable可读可写层,这层就用来存放容器自己的数据--比如LOG。
docker stop xxx ,就是把复制过来的image层删了,其上的容器子深深的writable层还在的。
容器启动的时候其实是可以修改存储驱动的
不过,想来一般是不会去改的。确认是overlay2就行了。万一不是就换docker版本~
查看支持的文件系统👇注意aufs是aufs,autofs是autofs,不要瞎搞
docker优化
下载源,其实应该私有库作缓存来弄比如nexus
可以使用阿里的个人镜像加速地址
其实最好是用私有缓存库比如nexushttps://cloud.tencent.com/developer/article/1764866
socket通信-docker-client和server之间的通信
默认走的本地socket文件,无法支持远端的调用。
配置方法👇下图绿框框;但是用的不太多。一般就是本地连接。
该配置文件类似cli里的-H选项,既有socket文件也有tcp,可能就是写两个-H咯
还可以改service文件
先通过修改daemon.json去试下
但是报错了👆
换个思路,去service文件里改改
然后把daemon.json里的hosts那行删了,修改为
再reload 和 restart
此时tcp和socket文件都好了
此时就可以远端client 调用 server 了,也就是docker cli 连接 docker server引起后 调用命令了
然后远程跑一个nginx看看,此时容器都是退出的
去远端windows的cmd里执行远程cli,run一个nginx
然后去server看下docker ps
这就实现了远程执行docker cli
同时curl 瞧瞧,因为是容器里的ip没有暴露出来呢,所以ipsect看到ip后宿主机上curl下👇
要注意docker engine也就是服务端在哪,容器就运行在哪里,客户都的cli只是一个连接调用工具,很好理解,好比mysql 远程执行命令一样。
将来在K8S里的跨主机的远程docker调用可能就是用的这个。目前docker学习阶段还用不到。
看来是查不到就往下一个地址查找。
现在都是systemd了👇
不用改了,以前是这么改的👇也是daemon.json里
还有这个容器和镜像存放的路径-迁移就是复制粘贴该路径
默认是这里👆,这么改👇改到单独的高性能ssd上去,前文讲过了,目录不该直接挂到新磁盘上去,或者该目录这个目录挂过去也行👇
在旧版本的 Docker 中,可以使用 "graph"
指定 Docker 存储容器和镜像的路径。但是在较新的 Docker 版本中,该选项已被废弃,取而代之的是 data-root
。因此,您可以尝试将 "graph":"/data/docker"
替换为 "data-root":"/data/docker"
。
修改后的配置文件内容如下所示:
jsonCopy code{
"registry-mirrors":["https://si7y70hh.mirror.aliyuncs.com/"],
"data-root":"/data/docker"
}
修改完成后保存文件,并尝试重新启动 Docker 服务。您可以执行以下命令:
bashCopy codesystemctl daemon-reload
systemctl restart docker
还可以在service文件里配置
systemctl daemon-reload下,再重启一下systemctl restart docker
此时,会自动创建文件夹,但是docker images里是空的了,docker ps -a也是空的,之前退出的那些容器都没了。
原来的容器和镜像的文件都没过去
max-concurrent-dowload|upload,同时拉去和上传的限制
这个操作会涉及max-concurrent-dowload参数的限制,但不是完全涉及,如果images在本地就不用担心,知识限制了和docker 仓库之间的下载/上传的并发数。
日志的问题
1、容器的日志都是默认放在硬盘上的
2、日志的大小要限制下
3、日志文件也是落在容器和镜像存放的路径/var/lib/docker下的
通过docker info可见,👇当然我的路径改过的
log就在docker root下的container文件夹里的每个容器文件夹里。
限制配置
日志的最大值和滚动覆盖👆
docker日志越来越大把硬盘撑满了,如何解决
1、上图👆限制+滚动日志
2、docker也是在容器和镜像的目录下的也就是/var/lib/docker/,将这个目录挂到单独的磁盘就行了。
curl伪装浏览器,也就是伪装访问方式-A可以-H也行
实验
1、先跑一个nginx
2、然后curl访问这个容器的ip
这就使用curl 伪装了一个用户访问方式--user-agent
3、找到有该user-agent关键词的日志
总之就在这些文件里
很贱的grep -r就行了,不要用-R
-R是会继续搜索软连接的,比如上图的第一个No such file or directory就是一个ln -s👇这种搜索一般没必要
将来日志会越来越大,而且不仅仅日志,images和容器也会越来越多,之前的处理方式有一种(是在runner上的操作可能会简单的),
清除无用的镜像容器慎用
live-restore
如果docker服务重启了,容器会不会重启?不会,docker重启,容器就停掉了👇
反之删除配置文件里的live-restore,重启docker后,所有容器就停了