IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 读《Docker核心技术与实现原理》文章笔记 -> 正文阅读

[系统运维]读《Docker核心技术与实现原理》文章笔记

Docker采用C/S架构,包括客户端和服务端,Dokcer守护进程Daemon作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)

客户端和服务端可以运行在一个主机上,也能通过socketRESTful API进行通信

进程

命名空间(Namespace)

Linux通过Namespace来实现进程的隔离,Docker容器内部的任意进程对宿主机中的进程一无所知,运行在其中的应用就像独立的操作系统中运行一样。

  • pid 命名空间
    不同用户的进程就是通过pid命名空间隔离开的,且不同命名空间中可以拥有相同的pid。每个容器进程在Docker中的父进程就是Dokcer进程,每个容器进程拥有不同的pid命名空间,且允许嵌套

  • net 命名空间
    每个容器通过net命名空间来实现网络隔离,每个net命名空间拥有独立的网络设备,ip,路由表,/proc/net目录。Docker采用默认的veth方式,将容器中的虚拟网卡同主机host的一个网桥Docker0连接在一起

  • ipc 命名空间
    容器中进程的交互还是采用了Linux常用的进程间交互方式(interprocess communication - IPC),包括信号量,消息队列,共享内存。容器的进程间交互实际上还是 host 上具有相同pid命名空间中的进程间交互,因此需要在IPC资源申请时加入命名空间信息,每个IPC资源有一个唯一的 32 位 id。

  • mnt 命名空间
    类似chroot,将一个进程放到一个特定的目录执行。mnt 命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间 中的进程所看到的文件目录就被隔离开了。同 chroot不同,每个命名空间中的容器在/proc/mounts 的信息只包含所在命名空间的mount point

  • uts 命名空间
    UTS("UNIX Time-sharing System")命名空间允许每个容器拥有独立的 hostnamedomain name, 使其在网络上可以被视作一个独立的节点而非 主机上的一个进程。

  • user 命名空间
    每个容器可以拥有不同的用户和组id,也就是说可以在容器内用容器内部的用户执行程序,而非主机上的用户

因此Docker利用命名空间实现了进程和网络的隔离

网络

虽然容器通过命名空间实现了网络的隔离,但是却没有办法通过宿主机的网络与互联网连通,会造成很多不便和限制。Docker为我们提供了四种网络配置模式Host、Container、NoneBridge模式。
默认的是网桥(Bridge)模式

  • Bridge
  1. Docker服务在主机启动后会创建一个虚拟网桥docker0,随后在主机上启动的所有服务默认都会与该网桥相连。
  2. Docker创建一个新容器的时候会创建一对虚拟网卡,一个放到容器中,并改名为eth0,该eth0只在容器的命名空间内可见;
  3. 另一个桥接到docker0网桥上,并具有唯一的名字,如veth7689
  4. 从网桥的可用地址中分一个ip地址给容器的eth0,并配置默认路由到网桥docker0veth7689

可以在docker run的时候通过- -net=参数来指定容器的网络配置,有四个选项:

  • –net=bridge
    这个是默认值,连接到默认的网桥。
  • –net=host
    告诉 Docker不要将容器网络放到隔离的命名空间中,让容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它root进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。
  • –net=container:NAME_or_ID
    Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP地址和端口等网络资源,两者进程可以直接通过 lo 环回接口通信。
  • –net=none
    Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。

CGroups

倘若其中的某一个容器正在执行 CPU密集型的任务,那么就会影响其他容器中任务的性能与执行效率,导致多个容器相互影响并且抢占资源,因此Docker通过CGroups技术隔离主机上的物理资源,如CPU、内存、磁盘I/O 和网络带宽等。

每一个CGroup 都是一组被相同的标准和参数限制的进程,不同的 CGroup 之间是有层级关系的,可以继承。在CGroup 这种机制中,所有的资源控制都是以CGroup作为单位实现的,每一个进程都可以随时加入和退出一个 CGroup

UnionFS

联合文件系统UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下.

目前版本的的Docker默认使用overlay2存储驱动,之前是aufs

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:55:01  更:2021-12-24 18:56:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:31:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码