您的位置:首页 > 运维架构 > Docker

docker简介

burisi_ken 2019-06-20 17:40 465 查看

参考: https://www.cnblogs.com/guarderming/p/9455838.html(docker基础:隔离机制)

https://blog.csdn.net/i042416/article/details/85161108

https://blog.csdn.net/cbl709/article/details/43955687(虚拟机和容器对比)

https://www.cnblogs.com/sparkdev/p/9129334.html(docker组件和工作原理)


docker本身不是容器,容器的思想起源于lxc,docker是把lxc所实现的功能做成更易于使用的接口提供给用户。

容器和虚拟机对比:

虚拟机:每个虚拟机使用不同的内核,完全隔离,看上去就跟普通机器没什么两样。优点:隔离性好 缺点:占用资源太多

容器:每个容器使用相同宿主机内核和一些底层的环境。  优点:极大地节约资源,性能更好   缺点:较为复杂

容器的基础:隔离

容器的思想有点类似同一主机上,两个进程的隔离,比如linux的chroot命令,可以使进程限制在固定目录,除此之外跟隔离相关的功能,还有namespace和cgroup

namespace:

UTS:主机及域名

     IPC:信号量,消息列队及共享内存

     Pid:进程编号

     Network:网络设备,网络协议栈,端口等

     Mount:挂载点,文件系统(四种挂载方式:私有挂载,主从挂载,shell型挂载,不可绑定挂载)

     User:用户和组  (内核3.8版本才支持,所以contos系列跑docker最好用7以上版本)

 

 

Cgroup(并不是完整限制,而是优先级)

     硬件资源限制(cpu用量,mem内存用量,disk硬盘用量)

特征:

1\cgroup以伪文件系统进行管理

        2\cgroup颗粒度线程级别

        3\所有的资源管理都叫subsystem

        4\子进程和父进程同属同一个cgroup

        5\实现方式内核附加hooks

    作用:


1、 资源限制

2、 优先级分配

3、 资源统计

4、 进程控制——挂起/恢复


术语:

      Task:任务。表示系统的一个进程

      Cgroup:控制组。按照某个资源控制标准划分组。包含一个或多个子系统。

      Subsystem:资源调度器。具体的限制措施

      Hierarchy: 层级树。放置多个cgroup


基本规则:


1、 同一个hierarchy可以附加一个或者多个subsystem

2、 一个已经附加在某个hierarchy上的subsystem不能附加到某个其他含有别的subsystem的hierarchy。

3、 一个task不能属于同一个hierarchy的不同cgroup,但能属于另外一个hierarchy的cgroup

4、 刚fork出的子进程在初始状态与其父进程处于同一个cgroup


Cgroup查看命令

Yum -y install libcgroup   //cgroup的工具集

Lssubsys:查看计算机有哪些子系统

Lscgroup:查看当前系统有多少个cgroup

Lssubsys -m memory :查看子进程在哪里

容器功能的实现起源于lxc(linux container),在docker中则用runc实现,关于docker各组件的功能和工作流程,推荐看:https://www.cnblogs.com/sparkdev/p/9129334.html,这里摘要部分重点

容器镜像的下载是由 dockerd 完成的,但容器的创建和运行就需要 containerd(docker-containerd) 来完成了。Dockerd 与 docker-containerd 之间是通过 grpc 协议通信的。当 docker-containerd 收到 dockerd 启动容器的请求之后,会做一些初始化工作,然后启动 docker-containerd-shim 进程,并将相关配置作为参数传给它。docker-containerd 负责管理所有本机正在运行的容器,而一个 docker-containerd-shim 进程只负责管理一个运行的容器,它相当于 docker-runc 的一个封装,充当 docker-containerd 和 docker-runc 之间的桥梁,docker-runc 能干的就交给 docker-runc 来做,docker-runc 做不了的就放到这里来做。

docker yum 源:wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

安装docker: yum install docker-ce  -y

运行docker(hello-world镜像为例):docker run hello-world


一个hello-world 容器的运行经历了如下四步:

1.Docker 客户端向 docker daemon 发送请求

2.Docker daemon 从 Docker Hub 上拉取镜像

3.Docker daemon 使用镜像运行了一个容器并产生了输出

4.Docker daemon 把输出的内容发送给了 docker 客户端


标签: