docker 学习路线

docker 学习路线

参考资料

理解 docker 的核心技术(core tech)

  • docker 的核心技术有 namespace, control groups, union filesystem

Namespaces

  • 命名空间 (namespaces) 是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。
  • Docker 其实就通过 Linux 的 Namespaces 对不同的容器实现了隔离。
  • Linux 的命名空间机制提供了以下七种不同的命名空间,包括 CLONE_NEWCGROUPCLONE_NEWIPCCLONE_NEWNETCLONE_NEWNSCLONE_NEWPIDCLONE_NEWUSERCLONE_NEWUTS,通过这七个选项我们能在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。
  • Docker 通过命名空间成功完成了与宿主机进程和网络的隔离。

进程

  • 一个是 pid 为 1 的 /sbin/init 进程

    • 负责执行内核的一部分初始化工作和系统配置,也会创建一些类似 getty 的注册进程。
  • 另一个是 pid 为 2 的 kthreadd 进程
  • 这两个进程都是被 Linux 中的上帝进程 idle 创建出来的。
    • 负责管理和调度其他的内核进程。
  • Docker 容器内部的任意进程都对宿主机器的进程一无所知。
  • 在 setNamespaces 方法中不仅会设置进程相关的命名空间,还会设置与用户、网络、IPC 以及 UTS 相关的命名空间。

网络

  • Docker 为我们提供了四种不同的网络模式,HostContainerNoneBridge 模式。
  • Docker 默认的网络设置模式:网桥模式。
    • 除了分配隔离的网络命名空间之外,Docker 还会为所有的容器设置 IP 地址。
    • 当 Docker 服务器在主机上启动之后会创建新的虚拟网桥 docker0,随后在该主机上启动的全部服务在默认情况下都与该网桥相连。
    • 在默认情况下,每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在创建的容器中,会加入到名为 docker0 网桥中。
  • libnetwork:
    • 提供了一个连接不同容器的实现,同时也能够为应用给出一个能够提供一致的编程接口和网络层抽象的容器网络模型。

挂载点

  • 新的进程中创建隔离的挂载点命名空间需要在 clone 函数中传入 CLONE_NEWNS,这样子进程就能得到父进程挂载点的拷贝,如果不传入这个参数子进程对文件系统的读写都会同步回父进程以及整个主机的文件系统。
  • 如果一个容器需要启动,那么它一定需要提供一个根文件系统(rootfs),容器需要使用这个文件系统来创建一个新的进程,所有二进制的执行都必须在这个根文件系统中。
  • 为了保证当前的容器进程没有办法访问宿主机器上其他目录,我们在这里还需要通过 libcontainer 提供的 pivot_root 或者 chroot 函数改变进程能够访问文件目录的根节点。
  • chroot 的使用能够改变当前的系统根目录结构,通过改变当前系统的根目录,我们能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构个文件,也就建立了一个与原系统完全隔离的目录结构。

CGroups

  • Control Groups(简称 CGroups)就是能够隔离宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网络带宽。
  • 每一个 CGroup 都是一组被相同的标准和参数限制的进程,不同的 CGroup 之间是有层级关系的,也就是说它们之间可以从父类继承一些用于限制资源使用的标准和参数。
  • 当我们使用 Docker 关闭掉正在运行的容器时,Docker 的子控制组对应的文件夹也会被 Docker 进程移除,Docker 在使用 CGroup 时其实也只是做了一些创建文件夹改变文件内容的文件操作,不过 CGroup 的使用也确实解决了我们限制子容器资源占用的问题,系统管理员能够为多个容器合理的分配资源并且不会出现多个容器互相抢占资源的问题。
  • 每一个 CGroup 下面都有一个 tasks 文件,其中存储着属于当前控制组的所有进程的 pid,作为负责 cpu 的子系统,cpu.cfs_quota_us 文件中的内容能够对 CPU 的使用作出限制。

UnionFS

  • Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。
  • 使用 docker run 非常轻松地从远程下载 Docker 的镜像并在本地运行。
  • Docker 镜像其实本质就是一个压缩包,我们可以使用下面的命令将一个 Docker 镜像中的文件导出, docker export $(docker create busybox) | tar -C rootfs -xvf -
  • Docker 中的每一个镜像都是由一系列只读的层组成的,Dockerfile 中的每一个命令都会在已有的只读层上创建一个新的层, 当镜像被 docker run 命令创建时就会在镜像的最上层添加一个可写的层,也就是容器层,所有对于运行时容器的修改其实都是对这个容器读写层的修改。
  • 容器和镜像的区别就在于,所有的镜像都是只读的,而每一个容器其实等于镜像加上一个可读写的层,也就是同一个镜像可以对应多个容器。
  • AUFS 作为联合文件系统,它能够将不同文件夹中的层联合(Union)到了同一个文件夹中,这些文件夹在 AUFS 中称作分支,整个『联合』的过程被称为联合挂载(Union Mount)。
  • 每一个镜像层或者容器层都是 /var/lib/docker/ 目录下的一个子文件夹;在 Docker 中,所有镜像层和容器层的内容都存储在 /var/lib/docker/aufs/diff/ 目录中。
  • 而 /var/lib/docker/aufs/layers/ 中存储着镜像层的元数据,每一个文件都保存着镜像层的元数据,最后的 /var/lib/docker/aufs/mnt/ 包含镜像或者容器层的挂载点,最终会被 Docker 通过联合的方式进行组装。
  • Docker 还支持了不同的存储驱动,包括 aufs、devicemapper、overlay2、zfs 和 vfs 等等,在最新的 Docker 中,overlay2 取代了 aufs 成为了推荐的存储驱动,但是在没有 overlay2 驱动的机器上仍然会使用 aufs 作为 Docker 的默认驱动。
    • docker info | grep Storage 查看存储驱动
  • Linux 命名空间、控制组和 UnionFS 三大技术支撑了目前 Docker 的实现,也是 Docker 能够出现的最重要原因。

docker 基本组件

基本组件(Docker daemon, Docker client, registry镜像库, image镜像,container容器)

  • 容器 = 镜像 + 读写层
  • 一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。
  • Docker daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。
  • Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。

docker 实践

  • 编写 Dockerfile 文件,设定 docker 编译规则
  • docker build -t jianglong/nginx_web:v1 . 编译时设置仓库名,镜像名和版本号
  • 构建完成之后,使用 docker images 命令查看所有镜像
  • docker run --name nginx_web -d -p 8080:80 jianglong/nginx_web:v1 启动容器

原文地址:https://www.cnblogs.com/longjiang-uestc/p/12445761.html

时间: 2024-08-04 14:24:28

docker 学习路线的相关文章

优秀的云计算工程师需要学什么?云计算Docker学习路线

云计算工程师要学什么?随着互联网的快速发展,云计算这个词大家并不陌生,但是云计算究竟是做什么的,想要从事云计算要学习什么,很多都不知道,那么今天就给大家讲一下云计算. 云计算是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源.云是网络.互联网的一种比喻说法.过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象.因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸.预测气候变化和市场发展趋势

大数据分析与机器学习系统学习路线指导(1)

3.开始专业课程的学习,请根据自己的学习能力和基础,逐渐选择学习课程,一年完成学习即可!三个专业方向课程详解如下: 数据分析师专业方向 学习路线建议 课程名称 难易程度 基础课 大数据的统计学基础 ★ 基础课 大数据的矩阵计算基础 ★ 工具课 深度玩转Excel ★ 工具课 R语言数据分析.展现与实例 ★ 工具课 SPSS数据分析入门与提高 ★★ 工具课 数据分析与SAS ★★ 应用课 基于软件学习数据挖掘算法与案例 ★ 应用课 BI实战之cognos 篇 ★★ 应用课 量化投资 ★★ 应用课

大数据学习路线(自己制定的,从零开始)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点. 学习路线 Linux(shell,高并发架构,lucene,solr) Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume) 机器学习(R,mahout) Storm(Storm,kafka,redis) Spark(scala,spark,spark core,

区块链学习路线

2018年春节最火热的概念应该就是区块链了,从百度的莱茨狗和网易星球刷屏朋友圈,到3点钟区块链无眠群的大火, 大佬们纷纷进军区块链,不了解区块链好像错过了什么,这里把自己学习区块链过程中的一些资料进行索引,可以循序渐进的了解区块链技术及其应用. 一.目标 比特币发展历史,挖矿以及相关应用 区块链底层技术,如共识算法, 侧链技术, 密码学知识等,理解PKI基本知识和原理 研究以太坊技术,了解ERC20,能够自行开发DAPP 熟悉Hyperledger Fabric 1.0架构,了解其业务流程和设计

2018大数据学习路线从入门到精通

最近很多人问小编现在学习大数据这么多,他们都是如何学习的呢.很多初学者在萌生向大数据方向发展的想法之后,不免产生一些疑问,应该怎样入门?应该学习哪些技术?学习路线又是什么?今天小编特意为大家整理了一份大数据从入门到精通的学习路线.并且附带学习资料和视频.希望能够帮助到大家.大数据学习资料分享群:119599574 第一阶段:Linux理论 (1)Linux基础:(2)Linux-shell编程:(3)高并发:lvs负载均衡:(4)高可用&反向代理 第二阶段:Hadoop理论 (1)hadoop-

大数据学习路线(自己制定,从零开始)

大数据已经火了很久了,一直想了解它学习它结果没时间,了解了一些资料,结合我自己的情况,整理了一个学习路线,. 学习路线 Linux(shell,高并发架构,lucene,solr) Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume) 机器学习(R,mahout) Storm(Storm,kafka,redis) Spark(scala,spark,spark core,spark sql,spark stream

Linux运维学习路线

linux学习路线 Linux入门 Linux系统管理 Linux服务及安全管理 Http:lamp/lnmp Cache:memcached,vanishDB:mysql/mariadb Linux集群:LB:Nginx,LvsHA:keeplived Http进阶:tomcat.mogileFS,GlusterFS(分布式存储)LB:haproxy HA:corosync+pacemaker,pcs/crmshMySQL:HA集群,备份恢复,主从复制,读写分离Nosql:redis,mong

Python学习路线分享(2019经典版)

Python 是Web 开发.游戏脚本.计算机视觉.物联网管理和机器人开发的主流语言之一,随着Python用户可以预期的增长,它还有机会在多个领域里登顶.Python学习路线(2019经典版)分享给你.阶段一是Python语言(用时5周,包括基础语法.面向对象.高级课程.经典课程):阶段二是Linux初级(用时1周,包括Linux系统基本指令.常用服务安装):阶段三是Web开发之Diango(5周+2周前端+3周diango):阶段四是Web开发之Flask(用时2周):阶段五是Web框架之To

大数据学习路线整理

一.大数据技术基础 1.linux操作基础 linux系统简介与安装    linux常用命令–文件操作    linux常用命令–用户管理与权限    linux常用命令–系统管理    linux常用命令–免密登陆配置与网络管理    linux上常用软件安装    linux本地yum源配置及yum软件安装    linux防火墙配置    linux高级文本处理命令cut.sed.awk    linux定时任务crontab 2.shell编程 shell编程–基本语法    shel