动力节点Docker深入浅出(一)Docker概述

发布时间 2023-05-23 14:39:10作者: 老杜铁杆粉丝

分享一下最近正在b站上看动力节点的docker课程,整理了相关学习笔记,会按照学习进度慢慢更新的,加油

  • 本套课程适合零基础、技术提升乃至所有编程语言开发者;
  • 课程对应包含含基础篇、提升篇与高级篇,共计十二大章节。
  • 本课程主要学习知识点:“7个深度/3个全面”;
  • 针对Docker的知识体系,无需再查找任何其它资料。真正做到一课在手,无需它求。

1.深度剖析了Windows的Hyper-V虚拟化原理、Docker引擎的现代架构体系、多架构镜像原理。

2.通过实例全面讲解了Dockerfile指令

3.深度解析了build cache机制、网络通信过程与通信原理。

4.全面且讲解了目前最流行的三种Docker管理平台及CIG监控平台的搭建、配置及使用。

5.深度讲解了docker distribution、docker registry、harbor私有镜像中心的搭建过程及原理。

6.深度剖析了HTTPS加密验证原理,

7.深度讲解了数字证书、根证书、数据摘要、数字签名等概念与用途。度剖析了Swarm的节点架构、服务架构及服务部署模式;

8.全面详细的讲解了Docker中MySQL“一主两从”的读写分离主从集群搭建过程,Redis的“一主两从”的主从集群搭建、“一主两从三哨兵”的高可用集群搭建,及“三主三从”的Redis分布式系统搭建过程。

9.深度解析了Swarm的Overlay网络模型及Ingress网络;并详细解读了Raft算法的原版英文论文,

10.深度剖析Swarm集群中manager的选举原理。

学习地址:https://www.bilibili.com/video/BV1sb411X7oe

1 Docker概述

1.1 课程引入

1.1.1 开发/运维互掐

开发与测试和运维间的矛盾,主要是由于环境的不同而引发的。如果能将开发人员使用的环境交给测试与运维使用,这些问题就都能解决。

1.1.2 DevOps

DevOps是一种思想,是一种管理模式,是一种执行规范与标准。它主要是用于促进开发、测试与运维部门间的沟通、协作与整合。

1.1.3 运维对架构师的抱怨

运维总是希望,如果能搞个一键部署,一下搞定就好了。

1.1.4 学习中集群搭建的问题

在学习过程中,由于机器配置较低从而导致启动的虚拟机较少,影响学习效率。

1.2 Docker简介

Docker 是一个开源的应用容器Container引擎, 其可以让开发者将应用及应用运行的环境打包到一个轻量级、可移植的镜像中,然后发布到任何流行的Linux、Windows机器上。
Docker原本是由一个PaaS提供商dotCloud公司的创始人Solomon Hykes发起的一个内部项目,是基于其多年云服务技术的一次革新,使用 Go 语言开发。2013年3月开源,并在GitHub上进行维护。后由于 Docker 项目的火爆,2013 年底,dotCloud 公司更名为 Docker,公司域名也变更为了https://docker.com

云计算中的服务包括三个层次:IaaS、PaaS、SaaS。

1.3 Docker的用途

1.3.1 提供统一的运行环境

在生产环境中,很多时候的开发、测试及上线环境都是不一样的,从而导致项目(war或jar)在不同阶段出现很多其它阶段所不存在的奇怪的问题。
Docker容器除了可以提供相同的应用外,还提供了该应用的统一运行环境,确保在任何宿主机HOST上都可以跑出相同的结果。即Docker = jar/war + 环境。

1.3.2 便捷的应用迁移

由于 Docker 确保了统一的运行环境,使得应用的迁移更加便捷。无论是物理机、虚拟机、公有云、私有云,Docker镜像的运行结果都是相同的。用户可以很方便地将一个平台上运行的应用,迁移到另一个平台上,而无需担心运行环境的变化导致应用无法正常运行。

1.3.3 超快的启动时间

传统的虚拟机技术启动应用一般需要数分钟:首先需要启动虚拟机,然后再加载虚拟机操作系统,最后还需要再手工启动应用。而 Docker 容器应用,由于直接运行于宿主机系统中,无需启动操作系统,因此可以做到秒级、甚至毫秒级的启动。

1.3.4 更轻松的维护和扩展

Docker公司及各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。

1.4 容器与虚拟机的区别

Docker容器的本质就是通过容器虚拟技术虚拟出的一台主机,就像虚拟机一样。可以将应用及其运行环境部署在这台虚拟出的主机上运行。但容器与虚拟机又有着本质的不同。

1.4.1 普通系统中的程序运行原理

程序是一个对计算机硬件资源调度使用的指令序列。

1.4.2 传统虚拟技术


传统的虚拟技术是在物理机的操作系统之上安装一个虚拟机管理程序,例如VMware、VirtualBox等。在其管理下可以创建很多个虚拟机。每个虚拟机需要安装自己独立的操作系统,而应用就是安装在虚拟机操作系统之上的程序,应用程序通过调用各种命令或库函数来使用其需要的各种系统资源。
对于完全相同的两个应用,其若需要运行在两个虚拟机中,则就需要两套完全相同的虚拟机操作系统与bins/libs,存在大量的资源占用冗余。形成资源浪费。

1.4.3 容器虚拟化技术

Docker容器运行在Docker引擎之上,所有Docker容器共享同一个Docker引擎,但它们的运行又是相互隔离、互不干扰的。由于Docker容器不需要进行虚拟硬件及操作系统,而是共享的宿主机的硬件与操作系统,所以Docker容器对系统资源的占用很少,其仅包含运行时必须的一些资源。所有Docker容器对于系统资源的使用都是由Docker引擎统一进行管理,所以对系统资源的利用率很高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。

1.5 Windows系统的虚拟化

1.5.1 Hypervisor

Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端操作系统同时会分配给每一台虚拟机适量的内存CPU网络磁盘

1.5.2 Hyper-V


Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。这也意味着微软会更加直接地与市场先行者VMware展开竞争,但竞争的方式会有所不同。Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化。
Hyper-V是微软提供的商业化的Hypervisor。KVM与Xen都是Linux系统之上的开源的Hypervisor。

1.5.3 现在的Windows系统

现在的Windows系统并不是一个“纯洁”的windows了,而是运行在Hyper-V上的虚拟机。而原来的应用层现在也是一个运行在Hyper-V上的虚拟机。系统上运行的一个个的应用,其实就是运行在应用层虚拟机之中。操作系统虚拟机能够管理应用层虚拟机。

1.5.4 windows的启动

1.5.5 VMware与Windows系统

VMware采用的是VMM虚拟化技术,该技术要求直接访问CPU硬件的虚拟化功能。但VMware作为windows系统中的应用,是运行在应用层虚拟机中的。导致VMware无法直接访问CPU硬件虚拟化功能。所以在安装VMware Workstation时会出现VMware Workstation与Hyper-V不兼容的问题。
从VMware Workstation 15.5.5版本开始,VMware重构了VMM技术,使其不需要直接访问CPU硬件,而是通过调用Windows10系统的WHP的API来运行。这样就解决了不兼容的问题。
结论:我们在安装VMware Workstation时,要安装15.5.5版本或更高版本,而Windows系统也要使用Windows10或更高版本。

1.6 Docker系统架构

Docker中具有几个非常重要的概念,下面通过理解这些概念来了解Docker的系统架构。

1.6.1 Docker Daemon

Docker Daemon,即Dockerd,Docker守护进程,其监听着Docker API请求并管理Docker对象,例如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理Docker服务。

1.6.2 镜像Image

Docker 镜像是用于创建 Docker 容器的模板。就像面向对象编程中的类。

1.6.3 容器Container

Docker容器是镜像运行时的实体。就像面向对象编程中类的实例。一个类可以创建出N多个实例,那么一个镜像同样也可以创建出N多个容器。每个处于运行状态的容器中都包含着一个或多个相关的应用,且它的运行不会干扰到其它容器。因为它们之间是相互隔离的。

1.6.4 仓库Repository

Docker镜像仓库用来保存相关的一组镜像,这组镜像具有相同的镜像名称,都与镜像仓库名称相同。仓库根据其中的镜像是否可以被公开共享,可以分为公开库与私有库。

1.6.5 标签Tag

通过:即可唯一定位一个镜像。即镜像标签其实就是镜像仓库中用于区分各个镜像的一种标识,同一仓库中的镜像具有不同的标签。

1.6.6 镜像中心Registry

Docker的镜像中心中存放着很多由官方、其他机构或个人创建的Docker仓库,Docker用户可以直接从这些仓库中pull需要的镜像,也可以将自己制作的镜像push到Docker镜像中心相应的仓库中。最常用的镜像中心是Docker官方的Docker Hub(https://hub.docker.com)。

1.7 总结

1.7.1 课程引入

这部分是重点。
理解引发开发、测试与运维关系不和谐的原因是什么?(环境不同)理解运维对架构师的抱怨点在哪里?(希望可以一键部署)了解学习过程中集群搭建所面临的问题是什么?(虚拟机不能启动过多)
能够描述什么是DevOps?(是一种思想,一种管理模式,用于促进三部门间的沟通与协作)。

1.7.2 Docker简介

能够简述Docker LOGO的由来(Container这个单词的意思不仅有“容器”,还有“集装箱”。这就是为什么LOGO中出现很多集装箱的原因。至于鲸鱼,是在众多LOGO方案中由网友投票投出的结果),Docker名称的含义(Docker的本义为码头工人,即操作集装箱的人)。

1.7.3 Docker的用途

了解Docker可以将应用与环境打包为镜像,然后可以实现“一处可运行,处处可运行”。

1.7.4 容器与虚拟机的区别

这部分是重点与难点。
容器与虚拟机的最大区别是,虚拟机中存在独立的硬件系统与操作系统,但容器中的全部是共享的宿主机中的操作系统与硬件系统。

1.7.5 Windows系统的虚拟化

这部分是重点与难点。
先要了解什么是Hypervisor(这在操作系统与硬件系统之间,用于实现多个虚拟机共享宿主机的硬件系统),什么是Hyper-V(它是微软提供的商业化Hypervisor,运行在windows系统上)? KVM与Xen是Linux系统上的开源的Hypervisor
然后要理解现在的Windows系统的架构(操作系统与应用层分别是两个虚拟机,位于Hyper-V之上)
至于VMware Workstation,要知道从15.5.5版本开始,其对VMM虚拟机技术进行了重构,由原来需要直接调用CPU的虚拟化功能,改变为了通过调用Win10系统的WHP(Windows Hypervisor Platform)的API来运行。解决了VMware Workstation与Hyper-V的不兼容问题。

1.7.6 Docker系统架构

能够对Docker系统架构图进行简述即可。