您现在的位置是:首页 >其他 >十三、Docker调优网站首页其他
十三、Docker调优
本章节将分享一些常见的docker调优方法,不尽完全,慢慢优化。
一、修改数据存放目录
由于docker默认的数据存放目录/var/lib/docker/,该目录默认是创建在根文件目录下的。而我们一般在安装系统时给系统盘分配的磁盘空间一般不会太大,一般情况下几十G到一百G,用一段时间后可能造成系统盘被占满。所以有时候我们需要修改docker的默认目录。
1)首先通过df -h查看文件系统的挂载和使用情况
[root@k8s-m3 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 304M 3.6G 8% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 38G 27G 11G 73% /
/dev/sda1 1014M 181M 834M 18% /boot
/dev/mapper/centos-home 19G 33M 19G 1% /home
tmpfs 3.9G 12K 3.9G 1% /var/lib/kubelet/pods/e65ed600-84a6-48d1-a05d-ff75703deb37/volumes/kubernetes.io~secret/sleep-token-gg8gq
......
2)新创建目录,并将准备好的数据盘挂载到该目录下:
[root@k8s-m3 ~]# mkdir /data/docker
[root@k8s-m3 ~]# fdisk /dev/sdb
[root@k8s-m3 ~]# mkfs.ext4 /dev/sdb1
[root@k8s-m3 ~]# blkid /dev/sdb1 -sUUID -ovalue
e197c176-49c4-4dae-86e3-d5d7d96b6510
[root@k8s-m3 ~]# mount UUID=$(blkid /dev/sdb1 -sUUID -ovalue) /data/docker
[root@k8s-m3 ~]# echo "mount UUID=$(blkid /dev/sdb1 -sUUID -ovalue) /data/docker" >> /etc/rc.d/boot.local
3)先关闭docker服务,目的为了在拷贝过程中容器数据发生改变。通过cp -R将docker默认目录/var/lib/docker下的文件拷贝到/data/docker目录下:
[root@k8s-m3 ~]#cp -R /var/lib/docker/* /data/docker
4)修改docker的相关配置,打开/usr/lib/systemd/system/docker.service文件,在ExecStart后面添加 --graph=/data/docker
或者直接修改/etc/docker/daemon.json文件,如下。其他的修改方法请自行测试,应该还可以通过修改其他文件实现该功能。
[root@k8s-m3 ~]# vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://fz5yth0r.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com/",
"https://docker.mirrors.ustc.edu.cn/",
"https://registry.docker-cn.com"
],
"insecure-registries":["192.168.2.142:5000"],
"data-root":"/data/docker",
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
4)修改完毕之后重启docker服务,并且通过docker info查看docker信息,发现docker目录已经改变:
[root@k8s-m3 ~]# systemctl daemon-reload
[root@k8s-m3 ~]# systemctl restart docker
[root@k8s-m3 ~]# docker info
5)docker ps -a查看容器,之前的容器都还在。
二、镜像加速
由于种种原因,国内从 Docker Hub 拉取镜像有时会比较慢或者根本就拉取不下来,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:
阿里云加速器:(登陆阿里云 -> 找到容器镜像服务 -> 左侧镜像工具 -> 镜像加速器 -> 复制加速器地址进行配置)地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors (应该能跳转到自己的)
1、安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce
2、配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://5sssm2l6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
网易云加速器 https://hub-mirror.c.163.com
百度云加速器 https://mirror.baidubce.com
由于镜像加速服务器可能出现宕机,建议同时配置多个镜像加速器,国内各大云服务商(腾讯云、阿里云、百度云)均提供了 Docker 镜像加速服务。各个镜像站测试结果请到 https://github.com/docker-practice/docker-registry-cn-mirror-test/actions
查看。
如下是我的配置的镜像加速服务:
[root@k8s-m1 ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://fz5yth0r.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com/",
"https://docker.mirrors.ustc.edu.cn/",
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.2.140"
],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。之后重新启动服务。
[root@k8s-m1 ~]# systemctl daemon-reload
[root@k8s-m1 ~]# systemctl restart docker
检查加速器是否生效,执行 docker info,如果从结果中看到了如下内容,说明配置成功。
Registry Mirrors:
https://fz5yth0r.mirror.aliyuncs.com/
http://hub-mirror.c.163.com/
https://docker.mirrors.ustc.edu.cn/
https://registry.docker-cn.com/
Live Restore Enabled: false
三、镜像替代
有时候我们部署k8s的时候,发现很多镜像默认是从k8s.gcr.io 拉取镜像,绝大多数时候都很慢或者根本就拉取不下来。这个时候就可以镜像替代,如:
k8s.gcr.io/coredns:1.7.0镜像可以用 registry.aliyuncs.com/google_containers/coredns:1.7.0 替代。
事实上,我们一般部署k8s的时候都是改变了拉取镜像的仓库,如下通过命令行指定:
–image-repository registry.aliyuncs.com/google_containers
或者修改配置文件。
imageRepository: registry.aliyuncs.com/google_containers (高版本地址已经发生改变)
某些云服务商提供了 仅供内部 访问的镜像服务,当您的 Docker 运行在云平台时可以选择它们。如阿里云、腾讯云、AWS等等。
其他优化,如存储格式、日志大小就不一一介绍了,比较简单。更多优化方法后期介绍。
更多关于docker容器和运维的相关知识,可以前往博客主页查看。