8.docker调优\管理
容器=cgroup+namespace_rootfs+容器引擎
docker 实战 https://blog.csdn.net/woniu211111/article/details/108675525
docker compose https://blog.csdn.net/pushiqiang/article/details/78682323
rootfs: 文件系统隔离
容器引擎:生命周期控制
namespace
主要用来访问隔离。原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而它们彼此之间是不可见的,所以就可以做到隔离
cgroup
control group,控制组,主要做资源控制。其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的
mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset
mkdir /sys/fs/cgroup/cpuset/child # 创建cgroup
echo $$ > /sys/fs/cgroup/cpuset/child/tasks # 通过将当前进程ID写入tasks文件,就可以将进程移动到这个cgroup
也可以将进程ID写入cgroup.procs
写入tasks文件,只会将指定进程放入cgroup
写入cgroup.procs,会将进程所属的线程也放入child中
清理占用的磁盘空间
docker system df 类似linux中的df,可查看docker镜像和容器的数量以及占用磁盘大小
docker system prune 用于清理磁盘,删除关闭的容器,删除无用的数据卷和网络,删除没有tag的镜像
docker system prune -a 清理更加彻底,可以将没有容器使用的镜像也删除
限制容器日志大小
将日志文件内容清空
truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log
限制nginx容器日志大小为5G,重启容器生效
nginx:
image: nginx:1.12.1
restart: always
logging:
driver: "json-file"
options:
max-size: "5g"
-------------------------------
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,意味着一个容器日志大小上限是500M,
max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。
docker图形化管理
portainer单机版
docker run -d -p 9000:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer-test \
docker.io/portainer/portainer
访问方式:http://IP:9000
portainer 远程管理
远程管理使用2375端口,需要开启端口
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock # 原配置文件
修改后,选择其中一种
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
添加容器自动重启
命令行修改
docker container updata --restart=always
修改配置文件,停止容器后修改,修改后重启生效
vim /var/lib/docker/containers/容器ID/hostconfig.json
"RestartPolicy":{"Name":"always","MaximumRetryCount":0}
修改docker默认的存储位置
docker info | grep 'Docker Root Dir' 查看
docker stop `docker ps -q` 停止所有容器
systemctl stop docker 停止docker服务
mv /var/lib/docker 新路径 移动原有文件
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --graph /new-path/docker
systemctl daemon-reload
systemctl restart docker
配置DNS
创建容器时指定
docker run --dns=x.x.x.x image
修改配置文件
vim /etc/docker/daemon.json
{
"dns": "x.x.x.x"
}
安装docker-machine 和 docker-compose
docker-machine
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
docker-compose
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
虚拟化三种类型
仿真
半虚拟化
基于容器的虚拟化
容器四种状态
运行 已暂停 重新启动 已退出
资源限制
docker rum -itd --name mycontainer --memory 256m --cpu-shares 1024 --user nobody --cap-drop all nginx /bin/bash
标签:容器,--,json,调优,usr,cgroup,docker,Docker08
From: https://www.cnblogs.com/lixunblogs/p/18167364