• Docker简介


    1、Docker为什么会出现?

    在传统的软件项目过程中,开发会提交代码给运维人员,由运维人员去部署。但是这时候运维人员会发现这个代码部署后产生很多问题。

      运维:你这开发代码不行啊,开发的代码出现了那么多问题,你看我部署都不成功。

      开发:扯犊子呢,你才不行,你全家都不行。我在我本地运行得好好的,怎么到你那里就不行了,是你的部署能力有问题吧。

      双方争执不下,那究竟是谁的问题呢?

    这时候就涉及到了环境和配置的问题,代码在开发的本地跑得好好的,说明开发使用了匹配的配置环境,而运维人员部署不成功,有可能是使用了与代码不匹配的环境和配置,所以这时候问题就跑抛出来了。

      1、那就让开发把他本地的【代码和环境还有配置,系统,数据等等】直接给运维,那这样不就可以正常部署了吗,这问题有什么难解决的啊。

      2、假设运维可以正常部署了,这时候他又会抱怨:这么多的服务器(集群),一个个的部署,我要部署到什么时候啊,有没有那种可以一键部署的工具啊,我太累了!

    带着以上两个问题,他来了,docker就是来帮助开发把【本地的代码和环境还有配置,系统,数据等等】一起打包,丢给运维去部署,就是因为docker,开发和运维从此相亲相爱了。

    2、docker理念

    基于GO语言实现的云开源项目。

    来看一下docker的logo,从这个logo,你可以看到docker的组成是什么了吗?

    1、海洋

    2、鲸鱼

    3、集装箱 

    那这3个对应的分别是什么呢?

    海洋:我们安装docker的服务器(比如我有一台安装linux系统的电脑,在该电脑上安装docker,那么海洋就对应着这台电脑)。

    鲸鱼:鲸鱼即代表我们安装的docker。

    集装箱:集装箱代表的是容器。docker中可以有无数个容器,每个容器都是分隔开的。

    3、Docker能干什么?

    • 传统虚拟机和docker的特点

        a、传统虚拟机:

        包含:内核,各种库,应用,内存,硬件模拟,网络等等

        缺点:1、资源占用多  2、冗余步骤多  3、启动慢

         b、Docker

        • 基于传统虚拟机以上的优点,docker发展了另一种虚拟化技术:Linux容器
        • Linux容器不是模拟一个完整的操作系统。
        • 既然有一部分是可以共用的,那就给Linux做一个减法吧。内核我要,其他的我不要了。

    •  比较传统虚拟机与docker的区别:
      • 传统虚拟机是虚拟出一套硬件,在其上运行一个完整的操作系统,再在该系统上运行所需的应用进程。
      • 而容器内的应用进程直接运行于宿主的内核(宿主就是以上描述的海洋),而且没有进行硬件虚拟,因此容器要比传统虚拟机更轻便。
      • 容器内直接相互隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

    4、Why Docker?

    更轻量:基于容器的虚拟化,仅包含业务运行所需的runtime环境。

    • CentOS/ubuntu基础镜像仅170M;宿主机可部署100-1000个容器。

    更高效:无操作系统虚拟化开销

    计算:轻量,无额外开销

    • 存储:系统盘aufs/dm/overlayfs;数据盘volume
    • 网络:宿主机网络,NS隔离

    更敏捷,更灵活

    • 分层的存储和包管理,devops理念
    • 支持多种网络配置

    docker架构图

    主要分为三部分:

    Client:客户端,比较Linux系统中右键打开的终端,或者使用Xshell连接服务器输入命令的地方。

    docker_host:安装Docker的那台机器,就是docker主机,主要有本地镜像和容器

    Registry:放置docker镜像的仓库

    5、Docker的基本组成:镜像、容器、仓库

    首先看下三者在实际工作中的一个位置:

    开发将某个应用开发好了,把包括代码,环境,配置,系统等一系列打包形成一个可交付的运行环境,形成一个镜像A,放到docker的镜像仓库中。

    此时运维需要将该应用部署到5个服务器中(集群)。那么只需要拉取镜像A到docker服务器,只有通过这个镜像文件才能生成5个容器(运行一个镜像就会形成一个容器)。

    一、镜像

    二、容器

    • 镜像与容器的关系,相当于镜像是一个类,容器是一个镜像创建的运行实例。一个镜像可以做成无数个容器。
    • image文件可以看作是容器的模版。Docker根据image文件生成容器的示例。
    • image文件生成的容器实例,本身也是一个文件,称为镜像文件。
    • 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。
    • 容器可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
    • 可以把容器看成一个简易版的Linux(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。

    三、仓库

    • 集中存放镜像文件的场所。
    • 仓库和仓库注册服务器是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像又有不同的标签。
    • 仓库分为公开仓库和私有仓库两种形式。
    • 最大的公开仓库是docker hub,存放了数量庞大的镜像供用户下载,这个是国外的仓库。
    • 国内的公开仓库包括阿里云,网易云等。

    6、Docker的运行底层原理

    Docker是怎么工作的?

    Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

    容器,是一个运行时容器,就是我们前面说到的集装箱。

     为什么Docker比VM快

    1、docker有比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU,内存利用率上docker将会在效率上有明显的优势。

    2、docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻,加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker只需要几秒钟。

  • 相关阅读:
    Effective C++笔记:继承与面向对象设计
    华为手机连不上adb解决方法
    android手机出现sqlite3 not found的解决方法
    adb permission denied
    Apache2.4为什么启动报错Cannot load php5apache2_4.dll into server
    界面排版-TableLayout的stretchColumns方法
    java中静态代码块的用法 static用法详解(转)
    Activity not started, its current task has been brought to the front
    (转)在低版本的SDK里使用高版本函数@SuppressLint("NewApi") or @TargetApi?
    Android笔记:解决 Your project contains error(s),please fix them before running your application问题
  • 原文地址:https://www.cnblogs.com/xiaoqingSister/p/13636211.html
Copyright © 2020-2023  润新知