从docker介绍及其简介

2023-10-18 11:39:03 浏览数 (1)

一、引言

1.我本地代码运行没问题啊,但是别人机器运行不了,从而导致环境不一致的问题

2.那个兄弟又写死循环了,怎么这么卡,在多用户的操作系统下,会相互影响。

  1. 天猫双十一的情况下,用户量暴涨,从而导致运维成本过高的问题

二、docker的由来

Docker 是一个开源项目,诞生于 2013 年初,最初是dotCloud 公司内部的一个业余项目。它基于 Google 公 司推出的 Go 语言实现。2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。

遵从了 Apache 2.0 协议,项目代码在 GitHub上进行 维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud公司后来都改名为 Docker Inc。Redhat已经 在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS产品中广泛应用。Docker 项目的目标是实现轻量级的 操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一 步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然 后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口 (类似iPhoneapp),更重要的是容器性能开销极低。

三、为什么要有docker?(why?)

先说docker是干啥用的。因为现在物理服务器是很强大的,我们如果在一台物理机上只跑一个服务就浪费了。而同时跑很多服务他们之间又互相影响,比如一个服务出了内存泄漏把整个服务器的内存都占满了,其他服务跟着倒霉。所以要把每个服务都必须隔离起来,让它们只使用自己那部分有限的CPU、内存、硬盘以及自己所依赖的软件包。在容器技术之前,这个最早是用的是虚拟机--------业界的网红。虚拟机技术的代表,是VMWareOpenStack所以,早先每个服务之间是用虚拟机来实现隔离的,但是对资源有点浪费,于是就有了docker,一个机器上可以装十几个到几十个docker,他们共享操作系统核心,占用资源少,启动速度快,但又能提供资源(CPU、内存、磁盘等)的一定程度的隔离。

简单来说就是,不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久,而且可能会有冲突。

如果想把两个应用程序隔离起来,可以在服务器上创建不同的虚拟机,不同的虚拟机放不同的应用,但是虚拟机的开销比较高。docker作为轻量级的虚拟机,是一个很好的工具。

##

四、什么是docker?(what?)

引入:我们知道,软件的依赖环境大致包括配置文件、代码、tomcat(web轻量应用服务器)、JDK(软件开发工具包)、操作系统

  • IT 软件中所说的 “Docker” ,是指容器虚拟化技术,docker本身并不是容器,而是用于支持创建和使用 Linux 容器的工具。
  • 在实际应用中是软件部署的一种解决方案:作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。同时,也提升计算机硬件资源的利用率。 补充 说明: # 沙箱机制(Sandboxie) 一、沙箱是什么?   沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响,即沙箱提供一个限制该应用程序对系统资源的访问权限。 ​ 二、沙箱的应用   (1)搭建测试环境。沙箱的应用只能访问自己的应用访问目录,而不能应用之间的资源进行共享,这样就形成了一个相对安全的机制,由于沙箱具有非常良好的独立性、隔离性,所以能够搭建一些具有高风险的软件进行测试。 ​   (2)应用容器的利用,如Docker就是应用沙箱机制,这样使得应用组件经过Docker的封装,使得在项目的迁移、测试环境到生产环境的部署,保证了应用程序的运行环境保持一致性,同时也减少大量在环境搭建上的工作量。

示例

  1. 首先,鲸鱼是操作系统。要交付的应用程序是各种货物,要将各种形状和尺寸不同的货物放到大鲸鱼上,得考虑每件货物怎么安放(应用程序配套的环境),还得考虑货物和货物之间能否重叠起来(应用程序依赖的环境是否会冲突)。
  2. 现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。
  3. 即:打包放到鲸鱼上,鲸鱼放到服务器上。也就是搭建(创建)=》运输(发送)=》运行:“build——ship——run”,这样在自己的电脑上怎么运行,在服务器上也会怎么运行。

用docker运行一个程序的过程:

去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。

五、docker的思想

集装箱:

  • 会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以

标准化

  • 运输的标准化:docker有一个码头所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接指派大鲸鱼去搬运这个集装箱就可以了
  • 命令的标准化:docker提供了一系列的命令,帮助我们去获取集装箱等等操作,当然,也可以上传等操作
  • 提供了RESTAPI:衍生出了很多的图形化界面,Rancher等
    • PS:REST API是一组关于如何构建Web应用程序API的架构规则、标准或指导,REST API遵循API原则的架构风格。REST是专门针对Web应用程序而设计的,其目的在于降低开发的复杂度,提高系统的可伸缩性。

隔离

  • docker在运行集装箱内的内容时,会在linux的内核中单独的开辟一片空间,这片空间不会影响到其他程序

六、docker的核心

docker三大核心:镜像、容器、仓库

镜像:(Image)=>复制的程序

定义:Docker 镜像可以看作是一个特殊的文件系统(模板),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)

作用:类似于虚拟机的快照,用来创建新的容器

特点:镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器:(Container)=>集装箱
  • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态 的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库: (Repository)=存放镜像的地方

用来保存镜像的仓库,控制版本,类似于git。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。

七、docker的作用

  • 解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况。
  • 限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
  • 双11时扩展机器用,降低运维人员的成本。

总结:

docker的标准化让快速扩展,弹性伸缩变得简单

使用之前:

每次发布一个程序,都要走一遍以下的流程:

使用之后:

迁移的时候,只需要在新的服务器上启动需要的容器就可以了,

无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。

八、docker与虚拟机的比较

作为一个作为一种轻量级的虚拟化方式,Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:

  • Docker 容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
  • Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
  • Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
  • Docker 通过Dockerfile支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。

特性

容器

虚拟机

启动速度

秒级

分钟级

隔离级别

进程级

操作系统级别

隔离策略

CGroups

Hypervisor

性能

接近原生

较好

内存

MB级

GB级

系统资源

0~5%

5~15%

镜像储存

KB-MB

GB-TB

硬盘适应

MB级

GB级

集群规模

上万

上百

运行密度

单台主机支持上千个

单台主机支持几个

隔离性

安全隔离

完全隔离

迁移

优秀

一般

高可用策略

弹性、负载、动态

备份、容灾、迁移

dockerVM快的原因:
  1. docker有着比虚拟机更少的抽象层
    • 由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源 因此在CPU、内存利用率上docker将会在效率上有明显优势
  2. docker利用的是宿主机的内核,而不需要Centos
    • 因此当新建一个容器时,docker不需要和虚拟机一样重新加载这个操作系统内核 进而避免寻找、加载操作系统内核比较费时费资源的过程
  3. 当新建个虚拟机时,虚拟机软件需要加载Centos这个新建过程是"分钟级别的"
    • docker由于直接利用宿主机的操作系统,则省略了这个个过程因此新建一个docker容器只需要"几秒钟"

九、docker与虚拟化

Docker 以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的 supervisor 支持。Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。

传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker 容器时在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

虚拟机技术:

  • 在一个操作系统之上运行 / 安装另一种操作系统
  • 应用程序, 操作系统和硬件三者之间的关系不变
缺点:
  1. 资源占用多
  2. 冗余步骤多
  3. 启动慢(分钟级)

容器虚拟化技术:

0 人点赞