带你初识Docker (概述、与虚拟机的区别、核心概念)

文章目录

  • 前言
  • 一、虚拟化概述
    • 1.虚拟化三种模式
    • 2.虚拟化功能
    • 3.三个层面
  • 二、Docker容器概述
    • 1.6大名称空间
    • 2.Docker和虚拟化的区别
    • 3.使用docker有什么意义
    • 4、应用场景
  • 三、docker的核心概念
    • 1.镜像(Image)
    • 2.容器(Container)
    • 3.仓库(Repository)
  • 总结
    • 1.docker run hello-world
    • 2.**docker有哪些优势? 和虚拟化比有什么优势?**
    • 3.如何把多个目录挂载到同一个目录下?
    • 4.docker原理
    • 什么是容器

前言

Docker 是在 Linux 容器里运行应用的一种开源工具,是一种轻量级的虚拟机

带你初识Docker (概述、与虚拟机的区别、核心概念)_第1张图片

  • 以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务

  • 例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响

  • 使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
    ——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境

  • 随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)

    ——>延伸出容器技术

  • 虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销

一、虚拟化概述

虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率

1.虚拟化三种模式

  • 全虚拟化(50%)
  • 半虚拟化(软、硬件结合的方式)
  • 直通(以全硬件的方式实现虚拟化的功能)

2.虚拟化功能

  • 在一个操作系统内,模拟多个操作系统
  • 以软件的方式模拟物理设备的功能

3.三个层面

  • 操作系统层
  • 抽象层
  • 内核层

二、Docker容器概述

名称空间:以不同空间划分不同资源

1.6大名称空间

namespace资源隔离——用容器技术封装

mount 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等

ipc:把内存资源划分开来,给不同的进程去用,每个应用的进程会给它分配一块资源,它只能用自己的(进程级别隔离)

net:网络资源

2.Docker和虚拟化的区别

小而灵活,效率至上!

特性 Docker 容器 虚拟机虚拟化
启动速度 秒级 分钟级
运行性能 接近原生(直接在内核中运行)10%-20% 50%左右损失
磁盘占用 50-100MB 3-5G
数量 成百上千,每个进程可控制一个容器 几十个
隔离性 进程级别 操作系统(更彻底)
操作系统 主要支持Linux 几乎所有
封装程度 只封装目标代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离

容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了~
这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制

Docker 拥有的众多优势与操作系统虚拟化的特点是分不开的

  1. 传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层
  2. 而 Docker 容器是直接再操作系统层面之上实现的虚拟化

3.使用docker有什么意义

①相同版本的docker引擎

②打包成镜像包,拖到另一个操作系统中(把引擎放在镜像中,带着镜像到处跑)

③利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了

镜像——>封装的某一时刻的服务/应用状态

容器——>应用跑起来的状态(正常提供服务的状态—运行时running)

4、应用场景

  • 打包应用程序简单部署

  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了

三、docker的核心概念

1.镜像(Image)

docker镜像是创建容器的基础,类似于虚拟机的快照

  • 可以理解为是一个面向 Docker 容器引擎的只读模板,比如:
  1. 一个镜像可以是一个完整的 CentOS 操作系统环境,称之为一个 CentOS 镜像
  2. 一个安装了 MySQL 的应用程序,称之为是一个 MySQL 镜像
  • Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用

2.容器(Container)

Docker 的【容器】是【从镜像创建的运行实例】,它可以被【启动、停止和删除】,容器即服务

  1. 创建的每一个容器都是相互隔离、互不可见的,相互之间隔离性超强,从而保证平台的安全性
  2. 可以把容器看做是一个简易版本的 Linux 环境,Docker 可以利用容器来运行和隔离一个个应用

3.仓库(Repository)

Docker 仓库时用来集中保存镜像的地方

  1. 创建完自己的镜像后,可以使用【push】命令将其上传至【公共仓库(public)】或【私有仓库(Private)
  2. 之后,在另一台机器上使用这个镜像,直接【pull】下来就可以了

仓库注册服务器【Registry】是存放仓库的地方,其中包含了多个仓库,每个仓库存放某一类镜像,并使用不同的标签【tag】来区分它们

目前最大的公共仓库是【Docker Hub】

总结

镜像(镜像的压缩包)
容器(实例,通过镜像创建)
仓库(存放镜像的地方)
公有仓库:Docker官方仓库
私有仓库:个人化、私有化的仓库

Docker是容器管理工具,容器由镜像创建而来,镜像从仓库中获取而来,仓库分为公有、私有

1.docker run hello-world

run指令 运行

①检测本地有没有该镜像(没有的话直接到docker hub上下载)

②create(将镜像创建为容器)+start将创建好的容器运行起来

小结:Dcoker是基于容器技术的轻量级虚拟化解决方案
低层原理:docker是容器引擎,把linux的cgroup、 namespaces 等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行C1i、api等) C/s

2.docker有哪些优势? 和虚拟化比有什么优势?

  • docker把容器化技术做成了标准化平台CAAS(docker 统一/指定了容器化技术的标准化平台)

    使用docker有什么意义(实现了3个统一)
    docker引擎统一了基础设施环境-docker环境——>image——>封装一一个简易的操作系统(3.0+G)
    docker引擎统一了 程序打包(装箱/封装-类比于集装箱)方式-docker镜像——>images
    docker引擎统—了程序部署(运行)方式-docker容器——>基于镜像——>运行为容器(可运行的环境)

    • 实现了一次构建、多次、多处使用

3.如何把多个目录挂载到同一个目录下?

(存储引擎)overlay2(现在使用) 和 (存储引擎) aufs(早期使用)叠加

4.docker原理

docker namespace实现的是资源隔离,cgroup实现的是资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配200g并不是实际占用物理磁盘200g)

什么是容器

容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 PaaS 最理想的状态嘛

你可能感兴趣的:(Docker,redis,数据库,缓存)