Docker 学习笔记
本文是b站动力节点docker学习视频的笔记整理,主要用于自己学习复习使用,视频具体地址为 : 动力节点docker
第一章 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.3Docker 的用途
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.6Docker 系统架构
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
通过<repository>:<tag>即可唯一定位一个镜像。即镜像标签其实就是镜像仓库中用于区分各个镜像的一种标识,同一仓库中的镜像具有不同的标签。
1.6.6 镜像中心 Registry
Docker 的镜像中心中存放着很多由官方、其他机构或个人创建的 Docker 仓库,Docker用户可以直接从这些仓库中 pull 需要的镜像,也可以将自己制作的镜像 push 到 Docker 镜像中心相应的仓库中。最常用的镜像中心是Docker官方的Docker Hub