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只需要几秒钟。

原文地址:https://www.cnblogs.com/xiaoqingSister/p/13636211.html