zoukankan      html  css  js  c++  java
  • Docker架构

    1、docker 框架

    Docker采用的是C/S架构,客户端向服务端发送请求,服务器负责构建、运行和分发容器。这里最常用的Docker客户端就是docker命令。服务端即是Docker daemon,其运行在宿主机上,负责创建、运行、监控容器和构建存储镜像。我们经常改完Docker的配置之后,会执行systemctl daemon-reload,这就是重启服务的作用。

    2、容器的底层技术

    1> cgroup 实现资源限额

    cgroup 即是control group。linux 通过cgroup 限制进程的资源,我们对容器CPU/IO/MEM限额实际就是在配置cgroup。

    容器的资源配置都在/sys/fs/cgroup/路径下可以找到。如下图标注的即是对IOCPUMEM限额的配置

     

    在cpu目录下包含docker独立的文件夹,进入docker文件夹就会有各个容器的ID

    接下来进入某个容器,查看cpu配额,是默认值1024

    2> namespace 实现资源隔离

    linux使用namespace让每一个容器看起来像一个独立的计算机,也就是ns实现了容器间的资源隔离。

    linux主要包含6种ns,分别是6种资源:Mount、UTS、IPC、PID、Network和User

    1、Mount让容器自己觉得有整个文件系统。可以在容器内部mount、unmout

    2、UTS让容器有自己的hostname。默认是短ID,或者通过-h设置的。

    3、IPC 容器有自己的共享内存和信号量来实现进程间的通信。不会和host和其他容器混在一起

    4、独立的PID

    所有容器挂在docker进程下

    ps axf 查看本机所有的进程

    可以看到容器的进程和容器的子进程。

    进入容器内部再查看进程ID和host的进程ID又有不同,容器有自己独立的PID,这就是ns提供的功能

    5、Network

    让容器有自己独立的网卡和IP等资源,这些在docker网络中介绍过

    6、User

    在容器可以创建新的用户,但是在宿主机是看不到该用户的。

    二、docker 镜像

    1、是什么

    镜像实际是一个文件系统。可以看成是一个只读模板,通过镜像可以创建容器。

    最大优点:共享资源。生成一个镜像都是基于一个基础镜像进行构建的,这个基础镜像可以被多个镜像使用。所以一个镜像是一层一层叠加而成的。

    对于镜像层只是只读的,对于容器的改动(增、删、改)只会发生在容器层,所以只有容器层才是可写的。容器还有一个特性就是Copy-on-Write,就是在修改容器的时候会拷贝镜像层到容器层进行修改,所有的修改对于镜像层也是不感知的。这样大大增加了容器操作的效率,也维护了镜像层可以作为其他容器的base的特性

    作者:tigergao
    功不唐捐 玉汝于成
  • 相关阅读:
    【情人节礼物】纯js脚本打造精美3D玫瑰
    程序员成长系列(一):手里必须有一套自己的框架
    从灌篮高手谈项目团队组成
    【java下午茶】12306的双人票
    从怀孕编程谈公司管理
    程序员的灵光一闪
    【java下午茶系列】java三重奏之封装
    程序员的每周工作40小时之路
    程序员真适合自由的环境吗
    程序员真的需要升职吗?
  • 原文地址:https://www.cnblogs.com/tigergaonotes/p/14454533.html
Copyright © 2011-2022 走看看