Docker—1章(Docker概述)


第一章 Docker概述

1.1 课程引入

1.1.1 开发/运维互掐

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

1.1.2 DevOps

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

1.1.3 运维对架构师的抱怨

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

1.1.4 学习中集群搭建的问题

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

1.2 Docker简介

Docker是一个开源的应用容器Container引擎,其可以让开发者将应用及应用运行的环境打包到一个轻量级、可移植的镜像中,然后发布到任何流行的LinuxWindows机器上。

Docker原本是由一个PaaS提供商dotCloud公司的创始人Solomon Hykes发起的一个内部项目,是基于其多年云服务技术的一次革新,使用Go语言开发。2013年3月开源,并在GitHub上进行维护。后由于Docker项目的火爆,2013年底,dotCloud公司更名为Docker,公司域名也变更为了https://docker.com。

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 传统虚拟技术

虚拟机系统中应用程序的运行原理

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

1.4.3 容器虚拟化技术

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

容器中应用程序的运行原理

1.5 Docker系统架构

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

1.5.1 Docker Daemon

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

1.5.2 镜像Image

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

1.5.3容器 Container

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

1.5.4 仓库Repository

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

1.5.5 标签Tag

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

1.5.6 镜像中心Registry

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


文章作者: 念心卓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 念心卓 !
  目录