Docker 概述

Docker 为什么会出现?

一款产品:开发→上线两套环境,应用环境,应用配置。
开发--------运维。问题:我在我的电脑上可以运行。版本更新,导致服务不可用。
环境配置是十分的麻烦,每一个机器都要部署环境(集群 Redis、ES、 Hadoop.....)费时费力。
发布一个项目( jar+(Redis MySQL jdk ES))项目能不能都带上环境安装打包
之前在服务器配置一个应用的环境Redis、MySQL、jdk、ES、Hadoop,配置麻烦,不能够跨平台。( Windows发布到 Linux ) 
传统:开发jar,运维来做
现在:开发打包部署上线,一套流程做完

举个例子

安卓项目:java → apk → 发布 ( 应用商店) → 某某某使用apk → 安装即可用
网站项目:java → jar (环境) → 打包项目带上环境(镜像) → ( Docker仓库:商店) → 下载我们发布的镜像 → 运行即可

核心思想

打包装箱,Docker通过隔离机制,可以将服务器利用到极致

学习 Docker

Docker是基于Go语言开发的开源项目

官网地址:https://www.docker.com

文档地址:https://docs.docker.com

仓库地址:https://hub.docker.com/

Docker 能做什么

原来的虚拟机技术

Kernel:内核;Lib:运行所需要的库;APP:跑的程序

Docker 概述

缺点:

  1. 资源占用十分多
  2. 冗余步骤多
  3. 启动很慢

容器化技术

Kernel:内核;Lib:运行所需要的库;APP:跑的程序

容器化技术不是模拟的一个完整的操作系统

Docker 概述

比较

比较 Docker 和 虚拟机技术 的不同:

  • 传统虚拟机,虛拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不干扰

DevOps (开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档、安装程序
Docker:打包镜像发布测试,一键运行

更便捷的升级和扩缩容

使用了Docker之后,我们部署应用就和搭积木一样
项目打包为一个镜像,扩展服务器A,服务器B

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器的性能可以被压榨到极致。