docker的一些原理

docker的一些原理

Scroll Down

这篇会比较杂七杂八 .- +.+ -.

在这里插入图片描述

docker的5个优势

==持续集成性
版本可控制
可移植性
可隔离性
安全性
==

容器runtime

runtime是容器真正运行的地方就好比于Java程序和jvm的关系。
lxc: docker 12版本以前
runc: dicker12版本以后
rkt: coreOS

容器的管理工具

lxd:lxc
runc:docker-engine17 ————> docker-ce/ee(企业版) 18
rkt:rkt cli

docker的编排引擎:

docker swarm
kubernetes(k8s)

容器网络:

单主机容器通讯docker :none host bridge
跨主机容器通信macvlan overlay (swarm)
第三方:flannel(k8s) weave calico

docker架构结构

docker-client(docker的客户端)
docker-daemon(启动server进程)
docker-service(服务端)
http-server (用http协议传输数据)
router(路由选择)
handler(分配具体任务)分配给job
job(小线程)分配给驱动器graph/network/exec
network(进行管理桥接的网卡 IP地址 端口号等数据信息)
netlink(进行总结我们想要创建的容器的样子)
exec(隔离驱动器)含有一个本地库文件
native(库文件)进行隔离namespaces 和 cgroup 最后加载到容器上
graph(进行下载或者加载镜像)
Group(image存放处)
db(存放镜像分层结构的数据库)
repository(真实存放镜像的地方)
在这里插入图片描述

base镜像

优点就是共享资源
容器是镜像的运行实例
1.经典镜像内部结构
不依赖其他镜像,从scratch构建
2.其他镜像可以以为基础进行扩展centos Ubuntu suse debian.....
—小镜像分层结构

——从0开始构建本镜像或者基于某镜像
——镜像第1层具体内容
镜像第2层具体内容
。。。。。。。
——启动镜像的适合执行的命令
—系统镜像分层结构 镜像里应该存放冷数据 意为不可变化的数据 因为容器重启会自动删除掉容器里的所以数据 所以容器里不应该存放数据库 因为容器一旦重启 就会重启COW 数据就会消失 镜像进行读取的时候是从上往下进行读取 也就是从container向下进行读取
——container(容器空间的原理是cow)可以进行删改修 可存放热数据但是需要备份
——各类应用 或程序 应存放冷数据
——rootfs(用户空间)/dev /proc /bin /sbin.... | busybox(其他操作系统的目录结构)应存放冷数据
——bootfs(内核空间)kernel(引导启动系统)应存放冷数据
容器只能使用物理机的kernel,并且不能修改。
2.自己构建镜像 如果镜像文件层数发生变化则不会有缓存特性 如果镜像层数不变 会直接从本地读取
创建镜像的时候会出现一个临时容器
到具体内容跟的时候会删掉这个临时容器
然后生成一个临时镜像层
最后这几个镜像层进行合成就生成镜像
运行几次命令就会重复入上几次步骤

对docker容器的限制

内存限额:

容器内存包括两部分:物理内存和swap
在docker中可以通过参数控制容器内存的使用量:
-m 或 -memory:设置内存的使用限额
--memory-swap:设置内存+swap的使用限额

指定该容器是最多使用200M内存和100M的swap

docker run -it -m 200M --memory-swap=300M centos

默认情况下两组参数值为 -1。表示对容器和swap不限制。
当只指定内存大小,不指定swap的使用量,则可以使用的swap为内存的2倍

--vm 1: 启动一个内存的工作线程
--vm-bytes 280M:每个线程分配内存280M

docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
限制容器使用CPU:

需要通过-c或者--cpu-shares设置容器使用CPU的权重。如果不指定默认为1024
限制容器使用CPU是取决于CPU share占所有容器CPU share总和的比例

docker run --name contarnerA -it -c 1024 progrium/stress --cpu 1
docker run --name containerB -it -c 512 progrium/stress --cpu 1

限制容器的Block IO(即磁盘的读写)

docker中可以通过设置权重,限制bps和iops的方式控制容器读写磁盘的带宽。
bps: 每秒读写的数据量 byte per second
iops: 每秒IO的次数 io per second
默认情况下,所有容器都能够平等的读写磁盘。可以通过--blkio-weight参数改变容器block IO的优先级
--device-read-bps:限制读取某个设备的bps
--device-write-bps:限制写入某个设备的bps
--device-read-iops:限制读取某个设备的iops
--device-write-iops:限制写入某个设备的iops

完结撒花