使用docker 解决了哪些的问题: Docker非常适合频繁改动快速发布的互联网项目。

  1. 简化了环境管理
    如: 出现了部署的问题环境的问题。 可以用docker 一键部署 一键安装linux 系统,一键安装mysql,一键安装ngnix等。
  2. 虚拟化更加轻量级
    说到容器,就会想到vmware等工具,不同于这些虚拟技术,docker的虚拟化更加的轻量级,传统的虚拟机都是先虚拟出一个系统,在换个系统上进行配置,这样并不能充分的利用物理机制的性能, 而docker 是一种操作系统级别的虚拟技术,是公用系统底层的内核和公共库,容器引擎提供了进程的隔离级别,让每个容器运行在单独的系统之上,这样docker 便利与管理和维护。
  3. 程序可移植

有了前两个的特性,程序的移植就可以顺利成章了 。

docker 和 虚拟机  区别:


docker

虚拟机

相同点

1. 都可在不同的主机之间迁移

2. 都具备 root 权限

3. 都可以远程控制

4. 都有备份、回滚操作


操作系统

在性能上有优势,可以轻易的运行多个操作系统

可以安装任何系统,但是性能不及容器

原理

和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离

每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统

优点

高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理

对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。

资源管理

弹性资源分配:资源可以在没有关闭容器的情况下添加,数据卷也无需重新分配大小

虚拟机需要重启,虚拟机里边的操作系统需要处理新加入的资源,如磁盘等,都需要重新分区

远程管理

根据操作系统的不同,可以通过 shell 或者远程桌面进行

远程控制由虚拟化平台提供,可以在虚拟机启动之前连接

缺点

对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统

每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限

配置

快速,基本上是一键配置

配置时间长

启动时间

秒级

分钟级

硬盘使用

MB

GB

性能

接近原生态

弱于原生态

系统支持数量

单机支持上千个

一般不多于几十个

docker 与传统容器

不同与传统容器,docker 早起基于 LXC,后来基于自研的 libContainer,docker 对于传统容器做了许多优化,如下:

  1. 跨平台的可移植性
  2. 面向应用
  3. 版本控制
  4. 组件复用
  5. 共享性
  6. 工具生态系统

docker 应用场景

  1. 加速本地开发
  2. 自动打包和部署应用
  3. 创建轻量、私有的PaaS环境
  4. .自动化测试和持续集成/部署
  5. 部署并扩展Web应用、数据库和后端服务器
  6. 创建安全沙盒
  7. 轻量级的桌面虚拟化

docker 核心组件

docker 中有三大核心组件:

•镜像

镜像是一个只读的静态模版,它保存了容器需要的环境和应用的执行代码,可以将镜像看成是容器的代码,当代码运行起来之后,就成了容器,镜像和容器的关系也类似于程序和进程的关系。

•容器

容器是一个运行时环境,是镜像的一个运行状态,它是镜像执行的动态表现。

•库

库是一个特定的用户存储镜像的目录,一个用户可以建立多个库来保存自己的镜像。

docker相关技术

1.隔离性

2.可度量性

3.移植性

4.安全性



MySQL 局部变量 mysql局部变量赋值的命令为

MySQL变量的使用在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量。但根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。 一、局部变量mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。其作用域仅限于该语句块。-- declare语句专门用于定义局部变量,可以使用default来说明默认值